我希望创建一个 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%

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top