Как обрабатывать пробелы в именах путей в цикле for? - PullRequest
1 голос
/ 01 сентября 2010

Попытка использовать путь к текущему сценарию, и путь содержит пробелы. Я не могу заставить его работать, хотя:

C:\Test Directory>dir
 Volume in drive C has no label.
 Volume Serial Number is 7486-CEE6

 Directory of C:\Test Directory

08/31/2010  07:28 PM    <DIR>          .
08/31/2010  07:28 PM    <DIR>          ..
08/31/2010  07:28 PM                20 echoit.cmd
08/31/2010  07:28 PM                94 test.cmd
               2 File(s)            114 bytes
               2 Dir(s)  344,141,197,312 bytes free

C:\Test Directory>type echoit.cmd
@echo off
echo %*

C:\Test Directory>type test.cmd
@echo off

for /f "tokens=*" %%a in ('%~dp0\echoit.cmd Hello World') do (
    echo %%a
)

C:\Test Directory>test
'C:\Test' is not recognized as an internal or external command,
operable program or batch file.

C:\Test Directory>

Ответы [ 3 ]

2 голосов
/ 01 сентября 2010

Измените test.cmd на следующее:

   @echo off

   for /f "tokens=*" %%a in ('"%~dp0\echoit.cmd" Hello World') do (
    echo %%a
   )

Вам нужно задать всю команду, за исключением аргументов, в кавычках. Командная строка Windows обрабатывает набор слов как одну команду при цитировании всей коллекции, поэтому необходимо исключить аргументы Hello World. Если вы включите это в кавычки, Windows воспримет это как часть команды, а не как аргументы.

0 голосов
/ 01 сентября 2010

как насчет использования ~ fs0, то есть

C:\Test Directory>type test.cmd
@echo off

for /f "tokens=*" %%a in ('%~fs0\echoit.cmd Hello World') do (
 echo %%a
)

где% ~ fsI - расширяет% I до полного пути с короткими именами

0 голосов
/ 01 сентября 2010

Вы пробовали добавлять кавычки?

for /f "tokens=*" %%a in ('"%~dp0\echoit.cmd" Hello World') do (
    echo %%a
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...