Как обрабатывать пробелы в именах путей в цикле for?

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

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>
1
задан esac 1 September 2010 в 02:30
поделиться

3 ответа

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

   @echo off

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

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

2
ответ дан 2 September 2019 в 21:40
поделиться

как насчет использования ~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
ответ дан 2 September 2019 в 21:40
поделиться

Вы пытались добавить цитаты?

for /f "tokens=*" %%a in ('"%~dp0\echoit.cmd" Hello World') do (
    echo %%a
)
0
ответ дан 2 September 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: