BATCH - цикл for: почему обрабатывается только последний файл? - PullRequest
1 голос
/ 31 октября 2011
@echo on

set src=c:\test
set dst=d:\test

xcopy %src% %dst%

for /F "TOKENS=*" %%G in ('dir/b ^%src%\*.*^') DO set new=%%G

attrib +h "%dst%\%new%"

del "%dst%"
attrib -h "%dst%\%new%"

pause

Источник: file1 file2

Пункт назначения: file3

Единственная проблема, с которой я столкнулся, это то, что я не знаю, почему в цикле for читается только file2, который добавляет атрибут h в файл. Я хочу, чтобы ко всем файлам в папке «Источник» был добавлен назначенный атрибут.

Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 31 октября 2011

Вы получаете то, что набрали: -)
Вы можете отладить пакетный файл, просто удалив @echo off.

Ваш цикл обрабатывает все файлы и устанавливает переменную new, но attrib +h, а остальное выполняется после цикла, а не внутри.

И я предполагаю, что вы хотите сначала спрятать все файлы, которые есть в папке src, затем удалить остальные и затем показать все файлы.
Но этот блок не может работать, поскольку он скрывает один файл, удаляет все остальные, а затем снова отображает файл.

attrib +h "%dst%\%new%"
del "%dst%"
attrib -h "%dst%\%new%"

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

@echo on

set src=c:\test
set dst=d:\test

xcopy %src% %dst%
setlocal EnableDelayedExpansion
for /F "TOKENS=*" %%G in ('dir/b ^%src%\*.*^') DO (
  set "new=%%G"

  attrib +h "%dst%\!new!"
)
del "%dst%"
attrib -h "%dst%\*.*"

pause
0 голосов
/ 06 ноября 2011
нет

Нет

Символ % не может использовать этот ^, должен использовать %

Если вы хотите вывести символ %

вы должны написать как %%

...