题
我希望创建一个 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
基本上,该脚本的作用是循环遍历目录中的每个 .txt 文件。它首先创建一个新目录并将 10 个文件移动到该目录中,然后再次创建一个新文件夹并将另外 10 个文件移动到该目录中,依此类推。但是,我遇到了问题 n
变量没有在循环中递增?我确信还有其他错误,因为即使使用 CMD 窗口也会关闭 pause
. 。感谢您的帮助或指导,感谢您的宝贵时间!
解决方案
您需要了解以下几点:
SETLOCAL ENABLEDELAYEDEXPANSION
是必需的,因为您正在更改变量并在单个括号内的块中使用它们更改的值。SET /?
命令行上会给出一些信息。在互联网上搜索这个术语,您会找到更好的解释。- 我使用的地方
!nf!
变量的格式与延迟扩展有关。 - 正如 Ghostdog74 提到的,你没有增加
%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
其他提示
你不递增%nf%
。
不隶属于 StackOverflow