将一个目录中的大量文件移动到多个目录

axs*_*uul 2 batch-file

我希望创建一个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.感谢您的帮助或指导,谢谢您的时间!

aph*_*ria 8

您需要了解的一些事项:

  • 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
Run Code Online (Sandbox Code Playgroud)