Я все еще довольно новый для powershell, и я все еще пытаюсь учиться.powershell заменить текст на
Вот мой вопрос им работать:
У меня есть куча битых файлов, которые мне нужно заменить с определенным текстом. Только Catch заключается в том, что в тексте есть одна вещь, которую нужно заменить переменной.
Позвольте мне проиллюстрировать:
Printer1.bat Printer2.bat
текст, который необходимо записать:
@echo off
setlocal EnableDelayedExpansion
::Identify OS
for /F "delims=" %%a in ('ver') do set ver=%%a
set Version=
for %%a in (95=95 98=98 ME=ME NT=NT 2000=2000 5.1.=XP 5.2.=2003 6.0.=Vista 6.1.=7 6.2.=8)
do (
if "!Version!" equ "this" (
set Version=Windows %%a
) else if "!ver: %%a=!" neq "%ver%" (
set Version=this
)
)
if "!Version!" equ "Windows XP" (
rundll32 printui.dll,PrintUIEntry /ga /n\\printserver\$printername
call P:\Script\wait.cmd 1
sc stop spooler
call P:\Script\wait.cmd 4
sc start spooler
call P:\Script\wait.cmd 1
) else echo Scriptet skal ikke kjøres på Windows7
Ping –n 5 –w 1 127.0.0.1>null
"@
Если вы заметили, что переменная $ PrinterName которая на самом деле то же самое имя как имя файла. Так что я хочу переписать файл с текстом, но заменить переменную на имя файла (без .bat)
Не уверен, что вы понимаете, что я пытаюсь сделать.
я знаю, как получить только имя файла без .bat, делая разделенный путь и заменить «»
Ive пытался так много методов, как заявления Foreach. .do while .. ничего не делает правильно
Спасибо. Это сделал трюк. Забыл о system.io.path Я не был полностью против своих попыток. Еще раз спасибо – vya
'System.IO.FileInfo'-objects включает в себя свойство' BaseName', которое вы можете использовать вместо 'system.io.path'. Пример: '$ printername = $ file.BaseName' –
Свойство' BaseName' доступно только в том случае, если вы получаете объект FileInfo с помощью 'Get-ChildItem' (который' ls' является псевдонимом для), поскольку это свойство скрипта, добавленное командлетом , Если вы получите список файлов по-другому, например. из любого типа 'System.IO', или если у вас есть только строки с именами файлов, вы не можете использовать' BaseName', но вы можете использовать '[System.IO.Path]'. Однако хорошее предложение, поскольку 'BaseName' делает более короткий код, пока вы получаете объект' FileInfo', используя 'Get-ChildItem'. –