PowerShell gc отсутствует скобка - PullRequest
0 голосов
/ 07 марта 2019

У меня есть пакетный скрипт, который вызывает команду powershell gc, и я не могу его исправить.

Это настоящий скрипт:

powershell -Command "(gc 'C:\test\run.bat') -replace '_installdir_', 'C:\Program Files\MySoftware'| Out-File -encoding ASCII C:\test\run.bat"

Так что мойСценарий просто меняет слово installdir на другую строку (C: \ Program ....) внутри файла, указанного в моем gc (так как оно совпадает с выводом).

Он отлично работает, но когда я пытаюсь сделать его универсальным для повторного использования, я сделал следующее:

powershell -Command "(gc '%1%') -replace '%2%', '%3%' | Out-File -encoding ASCII %1%"

Всякий раз, когда я выполняю его, независимо от того, что я передал как аргументы, у меня возникает эта проблема:

powershell -Command "(gc 'C:\test\run.bat231"
The string is missing the terminator: '.
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TerminatorExpectedAtEndOfString

Мой первый параметр в этом случае был C:\test\run.bat, такой же, какой я использовал в предыдущей версии.Я назвал так:

myscript.bat C:\test\run.bat aa bb

Обс .: Я поместил бессмысленные аргументы во второй и третий, чтобы выделить проблему в первом.

Но я понятия не имеюпочему он не работает, и откуда он берет это "231" в конце.

1 Ответ

2 голосов
/ 07 марта 2019

Позиционные параметры в пакете не имеют трейлинга %. Просто %1, %2, ... вместо %1%, %2%, ... используется для переменных. Из-за этого завершающий % в %1% интерпретируется как первый % в (с любопытством названной) переменной %') -replace '%, которая не определена. То же самое касается трейлинга % в %2% и %3%.

"(gc '%1%') -replace '%2%', '%3%' | Out-File -encoding ASCII %1%"
        ~~~~~~~~~~~~~~~ ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                       ^      ^                               ^

В приведенной выше строке %1 расширяется до первого позиционного параметра (в вашем случае, очевидно, C:\test\run.bat), в то время как «переменные» %') -replace '%, %', '% и %' | Out-File -encoding ASCII % расширяются до пустых строк, оставляя только цифры, обозначенные ^ в приведенной выше схеме.

Удалите завершающий % из позиционных параметров, чтобы решить эту проблему (вы также можете добавить ~, чтобы иметь внешние двойные кавычки из аргументов):

"(gc '%~1') -replace '%~2', '%~3' | Out-File -encoding ASCII %~1"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...