Пакетные файлы Windows: копирование последовательных файлов
Просто быстрое предисловие: я художник, и у меня немного понимания программирования, и я только начал изучать пакетные файлы Windows пару часов назад.
Итак, в моей школе, когда мы рендерим наши файлы в Maya, мы должны делать это на локальном диске, и мы используем несколько компьютеров, чтобы ускорить этот процесс. Это создает сотни изображений на нескольких компьютерах. Мой план состоял в том, чтобы создать пакетный файл, который копирует изображения (по мере их завершения) по сети на один диск, чтобы упростить управление отрендеренными изображениями.
Я использую цикл for для просмотра имен файлов (в данном случае BallTest_xxxx.exr), и я могу распечатать имя очень хорошо; но когда я пытаюсь установить имя файла для переменной в цикле, он ничего не печатает.
Там, где у меня есть "echo.% Asdf%", я хочу, чтобы он находился там, где он читает файл, и оттуда проверяет, завершен ли рендеринг (у меня есть пара идей для последнего, но сейчас я Я хотел бы получить представление о том, что мне нужно сделать, чтобы первая часть работала.) В результатах я вижу, что когда я пытаюсь установить asdf в качестве имени файла, он дает мне BallTest_000%x.exr, который я знать не правильно.
set "filename=BallTest_"
set "extension=.exr"
for /l %%x in (1, 1, 3) do (
if %%x lss 10 (
set asdf=%filename%000%%x%extension%
echo.%filename%000%%x%extension%
echo.%asdf%
)
)
pause
Заранее спасибо,
Джордж
2 ответа
Может быть это то, что вы ищете:
@echo off
set "filename=BallTest_"
set "extension=.exr"
setlocal enableDelayedExpansion
for /l %%x in (1, 1, 3) do (
if %%x lss 10 (
set asdf=%filename%000%%x%extension%
echo.%filename%000%%x%extension%
echo.!asdf!
)
)
endlocal
pause
Задержка расширения - запутанная вещь для новичков в пакетных файлах. Более подробную информацию вы можете найти здесь и здесь
Это основывается на ответе npocmaka:
REM
Строки - это просто комментарии к пакетному файлу, чтобы помочь пониманию Не стесняйтесь удалять их в своем окончательном коде.
@echo off
REM Set the part of the filename before the number padded with zeroes
set "filename=DocumentPrefix"
REM Set the remaining part of the filename after the number padded with zeroes
set "extension=Suffix.txt"
REM Enable delayed expansion so variables are expanded at execution time rather than parse time
setlocal enableDelayedExpansion
REM Give the variable %%x a range of values
for /l %%x in (2, 1, 4) do (
REM Pad the current number with zeros (lots used here to account for possible numbers reaching high orders)
set "paddedNumber=00000000%%x"
REM Extract the padded number with the desired number of digits
set "paddedNumber=!paddedNumber:~-6!
REM Tell the user what file is being copied (or moved)
echo Copying %filename%!paddedNumber!%extension%
REM Replace "copy" with "move" to move files rather than copy
REM Replace the source and destination addresses with your own
copy "C:\Path\To\Source\Folder\%filename%!paddedNumber!%extension%" "C:\Path\To\Destination\Folder\"
)
)
endlocal
REM Pause the script at the end so the user can see that the batch file has stopped (and hopefully completed correctly)
pause
Если вы хотите переместить файлы, а не копировать, просто измените copy
(в конце цикла для move
,
Чтобы скопировать только выборку файлов, измените три числа в цикле for по своему усмотрению. Номера цикла for соответствуют (первое число, интервал, последнее число). Например, для дополненных последовательных файлов, таких как 0003
, 0004
, для копирования файлов 6
в 15
из папки измените номера цикла на (6,1,15)
, Если вы хотите копировать / перемещать каждый n-й файл, укажите (1,n,x)
, где n
интервал (например, 3 для каждого третьего файла) и x
номер последнего файла, который вы хотите скопировать (в идеале он должен быть кратным n
плюс 1).
Я поставил paddedNumber
иметь восемь нулей. Вам не нужно будет настраивать эту строку, если в вашей папке нет более 100 миллионов файлов.