Windows批处理文件:复制顺序文件

时间:2014-08-24 16:04:06

标签: batch-file windows-7 sequential

只是一个简短的前言:我是一名艺术家,只有少量的编程理解,而我几小时前就开始学习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 个答案:

答案 0 :(得分: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

延迟扩展对于批处理文件中的新手来说是一件令人困惑的事情。 更多信息,您可以找到herehere

答案 1 :(得分:0)

这建立在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(在for循环结束时更改为move

要仅复制选定的文件,请根据需要更改for循环中的三个数字。 for循环数对应于(第一个数字,间隔,最后一个数字)。例如,对于填充的顺序文件(例如00030004),要将文件6复制到15,请将for循环数更改为(6,1,15) 。如果您只想复制/移动每个第n个文件,请指定(1,n,x),其中n是间隔(例如,每隔三个文件为3),x是最后一个文件的编号想要复制(理想情况下它应该是n加1的一些倍数。)

我将paddedNumber设置为八个零。除非您的文件夹有超过1亿个文件,否则您不需要调整此行。