只是一个简短的前言:我是一名艺术家,只有少量的编程理解,而我几小时前就开始学习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
提前致谢,
乔治
答案 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
答案 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循环数对应于(第一个数字,间隔,最后一个数字)。例如,对于填充的顺序文件(例如0003
,0004
),要将文件6
复制到15
,请将for循环数更改为(6,1,15)
。如果您只想复制/移动每个第n个文件,请指定(1,n,x)
,其中n
是间隔(例如,每隔三个文件为3),x
是最后一个文件的编号想要复制(理想情况下它应该是n
加1的一些倍数。)
我将paddedNumber
设置为八个零。除非您的文件夹有超过1亿个文件,否则您不需要调整此行。