2015-10-23 3 views
-1

Раньше я работал с партией этого цикла в папку и всю подпапку и перемещал все файлы, найденные в другом месте.Пакетный, без присмотра args in for loop

Внесенные изменения в эту партию, и теперь основной цикл больше не работает.

set "arg1=%~1" 
setlocal enabledelayedexpansion 
cd /d D:\!arg1! 
set /a count=0 
for /r %%i in (*.*) do (
... 
) 

Run

myBatch test 

И получил %i was unattended

Странных часть является то, что я не изменил эту часть кода

+1

Вы уверены, что ошибка 'был unattended' * * – npocmaka

ответ

1

Если у вас есть составленное имя, используйте аргумент в двойные кавычки CD:

set "arg1=%~1" 
cd /d "D:\%arg1%" 

setlocal enabledelayedexpansion 
set /a count=0 
for /r %%i in (*.*) do (
... 
) 
0

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

cd /d D:\!arg1! 

в

cd /d D:\%arg1% 

Вам не нужно задерживать расширение этой линии, потому что это не в цикле или в скобки блока кода. На самом деле вам вовсе не нужно включать setlocal enabledelayedexpansion для кода, который вы показали ... конечно, это может потребоваться для кода, который не отображается.

Кроме того, не забудьте указать аргумент (имя папки), когда вы вызываете файл bat, если в имени папки есть пробелы.

Если ни одна из этих проблем не устраняет проблему, можем ли мы увидеть больше кода? По крайней мере, какие участки кода, которые содержат %% я

+1

код не будет повреждать имя с помощью '!', потому что arg1 определен до того, как включено замедленное расширение. – dbenham