我希望创建一个Windows批处理脚本来移动大约2,000个文件并将它们拆分,以便每个文件夹有10个文件.我试图创建一个批处理脚本,但语法真的让我大吃一惊.这是我到目前为止所拥有的
@echo off
:: Config parameters
set /a groupsize = 10
:: initial counter, everytime counter is 1, we create new folder
set /a n = 1
:: folder counter
set /a nf = 1
for %%f in (*.txt) do (
:: if counter is 1, create new folder
if %n% == 1 (
md folder%nf%
set /a n += 1
)
:: move file into folder
mv -Y %%f folder%nf%\%%f
:: reset counter if larger than group size
if %n% == %groupsize% (
set /a n = 1
) else (
set /a n += 1
)
)
pause
Run Code Online (Sandbox Code Playgroud)
基本上这个脚本的作用是循环遍历目录中的每个.txt文件.它在开头创建一个新目录并将10个文件移动到该目录中,然后再次创建一个新文件夹并将另外10个文件移动到该目录中,依此类推.但是,我遇到的问题是n变量没有在循环中递增?我确定还有其他错误,因为即使使用了CMD窗口也关闭了我pause.感谢您的帮助或指导,谢谢您的时间!
您需要了解的一些事项:
SETLOCAL ENABLEDELAYEDEXPANSION是必需的,因为您正在更改变量并在单个括号内的块中使用其更改的值.SET /?在命令行上将提供一些信息.在互联网上搜索这个词,您会找到更好的解释.!nf!变量格式的地方与延迟扩展有关.%nf%.nf为0而不是1.这样,您要将文件移动到的文件夹编号与刚刚创建的文件夹编号相同.在您的代码中,您创建folderX,然后递增X,然后尝试将文件移动到X + 1.MOVE移动文件,MV无效.此批处理文件有效...但请确保您测试!我只测试了少量文件.
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
:: Config parameters
SET groupsize=10
:: initial counter, everytime counter is 1, we create new folder
SET n=1
:: folder counter
SET nf=0
FOR %%f IN (*.txt) DO (
:: if counter is 1, create new folder
IF !n!==1 (
SET /A nf+=1
MD folder!nf!
)
:: move file into folder
MOVE /Y "%%f" folder!nf!
:: reset counter if larger than group size
IF !n!==!groupsize! (
SET n=1
) ELSE (
SET /A n+=1
)
)
ENDLOCAL
PAUSE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4694 次 |
| 最近记录: |