Ошибка в операторе For / F в пакетном скрипте Windows - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь запустить команду в пакетном скрипте, чтобы разобрать четвертое слово строки.

Эта команда отлично работает в командной строке, но выдает ошибку при запуске внутри скрипта.Состояние ошибки:

Пропуск в это время не ожидался

db2cmd -i -c FOR /F "usebackq skip=3 tokens=4" %%G IN ("aliasname.txt") DO DB2 UNCATALOG SYSTEM DATABASE %%G

Не могли бы вы проверить, что я могу делать не так здесь?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Два разных варианта, достигающие одного и того же результата, зависят от вашего стиля.

  • опустите явный префикс db2cmd -i -c для любого действия CLP Db2 и автоматически запустите весь сценарий в db2cmd.Преимущество этого заключается в том, что он будет работать либо в окне CMD.EXE, либо в DB2CMD.EXE без изменений.В этом случае вам не нужно специальное цитирование или экранирование.Пакетный файл будет выглядеть следующим образом (отрегулируйте путь db2cmd в соответствии с вашей средой).
set db2cmd="C:\Program Files\IBM\SQLLIB\BIN\db2cmd.exe"
@if "%DB2CLP%"=="" %db2cmd% /w /c /i "%0" %* && @goto :EOF
FOR /F "usebackq skip=3 tokens=4" %%G IN ("aliasname.txt") DO DB2 UNCATALOG DATABASE %%G
  • Если вы предпочитаете явный префикс db2cmd -w -cв командах Db2 CLP вы должны избегать двойных кавычек, упомянутых в ответе Марка Баринштейна, хотя в сценарии требуется %% G:

    db2cmd -i -c FOR /F \"usebackq skip=3 tokens=4\" %%G IN ("aliasname.txt") DO DB2 UNCATALOG DATABASE %%G

-

Кроме того, вам может потребоваться исправить синтаксис команды Db2 CLP, например, db2 uncatalog system odbc data source или, альтернативно, db2 uncatalog database в зависимости от того, что вы хотите откатализировать.

0 голосов
/ 14 марта 2019

Вы должны использовать %G ссылку на переменную, если вы запускаете команду из командной строки, а не %%G, как вы используете в пакетных файлах.
Двойные кавычки должны быть экранированы.
Попробуйте это:

db2cmd -i -c FOR /F \"usebackq skip=3 tokens=4\" %G IN (\"aliasname.txt\") DO DB2 UNCATALOG SYSTEM DATABASE %G

Кстати,
Нет команды UNCATALOG SYSTEM DATABASE DB2.
Есть UNCATALOG DATABASE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...