Хотя и массивов в C тоже нет, это синтаксический сахар над указателями
Также убрал команду %%d заменив ее на %D потому что с двумя символами получал ошибку "Непредвиденное появление: %%d.
%%
в именах переменных цикла надо использовать %
.setlocal enabledelayedexpansion
.Отложенное расширение переменных среды НЕ ВКЛЮЧЕНО по умолчанию. Можно включить или отключить отложенное расширение переменных среды для конкретного вызова CMD.EXE с помощью параметра /V:ON или /V:OFF. Можно включить или отключить отложенное расширение переменных среды для всех вызовов CMD.EXE на данном компьютере или для данного пользователя, задав с помощью команды REGEDIT.EXE в системном реестре значение 0x1 или 0x0 для параметров REG_DWORD для следующих разделов: HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion и/или HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion Параметры пользователя переопределяют параметры компьютера. Параметры командной строки, в свою очередь, переопределяют параметры реестра. В пакетном файле аргументы SETLOCAL ENABLEDELAYEDEXPANSION или DISABLEDELAYEDEXPANSION переопределяют параметр /V:ON или /V:OFF. Для получения дополнительных сведений введите "SETLOCAL /?". Если отложенное расширение переменных среды включено, то для замены текущего значения переменной среды во время выполнения может использоваться символ восклицательного знака "!".
set /?
. setlocal enabledelayedexpansion
set /a cnt = 0
for /d /r "c:\исходный\каталог" %%d in (LOG) do (
xcopy "%%d" "d:\целевой\каталог\LOG!cnt!\" /e
set /a cnt += 1
)
endlocal
Вне составных команд интерпретатор обрабатывает сценарий построчно и ничего не знает о соседних строках. Составные команды считываются целиком
echo Hello, world!>)^&^^.txt
for %%x in (*.txt) do (copy %%x copy-%%x)
for %%x in (*.txt) do (more %%x)
cmd> echo Hello, world! 1>)&^.txt
cmd> for %x in (*.txt) do (copy %x copy-%x )
cmd> (copy )&^.txt copy-)&^.txt )
Скопировано файлов: 1.
cmd> for %x in (*.txt) do (more %x )
cmd> (more )&^.txt )
Hello, world!
cmd> (more copy-)&^.txt )
Hello, world!
)&^.txt
):cmd> echo Hello, world!>)^&^^.txt
cmd> for %x in (*.txt) do (copy %x copy-%x)
cmd> (copy )&^.txt copy-)&^.txt )
Скопировано файлов: 1.
cmd> for %x in (*.txt) do (more %x)
cmd> (more )&^.txt )
Hello, world!
cmd> (more copy-)&^.txt )
Hello, world!
Что, разве обычный for (или for /r или for /d) выдает имена файлов и пути с экранированными не стандартными символами?
По-моему, у такого подхода единственное достоинство — он позволяет обработать в цикле файлы с атрибутом «скрытый».
/c
). Заметим, что (в отличие от случая перенаправления ввода-вывода внутренней команды в/из канал(а)) он запускается без ключа /D
(отключение выполнения команд AutoRun из реестра), что добавляет непредсказуемости. К тому же, при перенаправлении вывода cmd, строки будут преобразованы из юникода в текущую кодировку консоли и, если текущая кодовая страница — 866 и в имени файла есть, например, символы «»…—Іі
, то они будут преобразованы в<>:-??
и получим «Не удается найти указанный файл». Впрочем, если установить кодовую страницу 1251, то перечисленные символы не будут искажены (а если 65001 (utf-8), то, вероятно, и любые другие, но она плохо поддерживается в ранних выпусках cmd). В любом случае знать об этом не помешает.
В чём сложность ввести такой небольшой текст вручную?