Пакетные файлы 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 миллионов файлов.

Другие вопросы по тегам