Чтение строк из текстового файла в пакетном файле - PullRequest
0 голосов
/ 06 июля 2010

Я знаю, что об этом уже спрашивали 100 раз, но каждый фрагмент кода, который я пробую, просто не работает. Я пытаюсь скомпилировать файл, а затем проверить файл ошибок, прочитать его построчно и вывести его в командную строку:

Это то, что я имею до сих пор:

Set var1= %1
Set var2= %var1:.mb=.ERR%

echo %var1%
echo %var2%

"C:\Program Files\MapInfo\MapBasic\mapbasic.exe" -D %var1%

FOR /f "delims=" %%a in (%var2%) do echo %%a

Таким образом, я беру путь к файлу в качестве командной строки, arg, это прекрасно работает, затем снимаю .mb и заменяю его на .ERR и запускаю программу для завершения файла .mb, все работает нормально, пока я нажмите на цикл.

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

FOR /F "delims=" %a in ("C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR") do echo %a 

но когда он запускается, он просто распечатывает "C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR" не содержимое файла.

Я могу заставить его работать, если я дам ему точное имя и не буду указывать путь с пробелами, например 'MapInfoInteropTemplate1.ERR', но я хочу, чтобы оно использовало %var2% для имени файла для чтения.

Если я поставлю ' по пути, он просто запустит мой текстовый редактор по умолчанию.

Я закончил тем, что пропустил генерацию всего пакетного файла компьютерного программирования, так что это действительно странно для меня, извините, если это основной вопрос.

1 Ответ

3 голосов
/ 06 июля 2010

Используйте параметр usebackq для for:

FOR /F "usebackq delims=" %%a in ("C:\Documents and Settings\woodrown\My Documents\Visual Studio 2008\Projects\MapInfoInteropTemplate1\MapInfoInteropTemplate1.ERR") do echo %%a  

В противном случае он будет интерпретировать все, что вы помещаете между двойными квотами, как строку для токенизации, а не как файл для чтения. Об этом также говорится в справке:

    or, if usebackq option present:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...