2015-09-19 1 views
-1

Пожалуйста, помогите, вот что я ищу, он должен попросить logs\output пути, пользователь поставляется путь должен заменить text1.txtвход Пользователь должен заменить строки другого файла

--text1.txt содержит c:\temp

Как и когда пользовательский пульт logs\output, он должен заменить только указанный выше путь text1.txt.

Это код партии, который у меня есть, он не работает.

@echo off 
echo. 
SET /P USERDEST=Please enter output\Logs path:c:\temp\path 
echo output\logs:c:\temp\path 

call:DoReplace "C:\temp" "c:\temp\path" test1.txt 
exit /b 

:DoReplace 
echo ^(Get-Content "%3"^) ^| ForEach-Object { $_ -replace %1, %2 } ^| Set-Content %4>Rep.ps1 
Powershell.exe -executionpolicy ByPass -File Rep.ps1 
if exist Rep.ps1 del Rep.ps1 
echo Done 
pause 

ответ

2

Вы можете использовать переменные в пакетном режиме (на самом деле, можно установить одну переменную, но не использовать его потом)

@echo off 
echo. 
rem set Default (set /p variable remains unchanged, if empty Input): 
set "USERDEST=c:\temp\path" 
SET /P "USERDEST=Please enter output\Logs path (or ENTER for Default): " 
echo output\logs: %USERDEST% 
rem it's better to enclose your Parameters in quotes (because contained spaces will be problematic): 
call:DoReplace "C:\temp" "%USERDEST%" "test1.txt" 
exit /b 

:DoReplace 
rem remove surrounding quotes with around %3 with %~3: 
echo ^(Get-Content "%~3"^) ^| ForEach-Object { $_ -replace %1, %2 } ^| Set-Content %4>Rep.ps1 
rem (where do you take %4 from? You call with only three Arguments) 
Powershell.exe -executionpolicy ByPass -File Rep.ps1 
if exist Rep.ps1 del Rep.ps1 
echo Done 
pause 
+0

Я начинающий использовать пакетный файл, поэтому, пожалуйста нести со мной за мои ошибки и недоразумения Вот что получилось после использования вашего кода. Как вы видите ниже, ввел новый путь c: \ temp \ 1234, также показал путь эха, который я дал некоторое время и выбросил ниже ошибки. Файл fyi..test1.txt присутствовал в исполняемом пути, у test1.txt уже был установлен путь «c: \ temp», , что я ожидал, это мой новый путь «c: \ temp \ 1234» должен был обновить test1. txt "c: \ temp" to "c: \ temp \ 1234" –

+0

Введите путь \ Logs пути (или ENTER для по умолчанию): c: \ temp \ 1234 output \ logs: c: \ temp \ 1234 Set -Content: входной объект не может быть привязан, поскольку он не содержит i nformation, необходимый для привязки всех обязательных параметров: Путь В E: \ Auto \ Rep.ps1: 1 char: 99 + (Get-Content "test1. txt ") | ForEach-Object {$ _ -replace "C: \ temp", "c: \ temp \ 1234"} | Set-Content <<<< + CategoryInfo: InvalidArgument: (C: \ Temp \ Журнал: String) [Set-Конте нт], ParameterBindingException + FullyQualifiedErrorId: InputObjectMissingMandatory, Microsoft.PowerShell .Commands.SetContentCommand –

+0

'бэр (где вы берете% 4 из? Вы вызываете только три аргумента) '. Я тестировал с «test2.txt» как четвертый параметр в строке 'call', и он работал нормально. – Stephan

Смежные вопросы