移动1000个文件到文件夹,每100个到1个文件夹批量

Move 1000 Files To Folders, Each 100 to 1 Folder Batch

想法是将文件移动到如下文件夹:

文件名:

1.pdf,2.pdf,3.pdf.....1000.pdf

结果必须是:

(1.pdf-100.pdf) To Folder 1
(101.pdf-200.pdf) To Folder 2
(201.pdf-300.pdf) To Folder 3
..

此代码有效,但它以 (0) 而不是 (1) 开头

    @echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.pdf) do (
    echo %%~na|FINDSTR /R /C:"^[0-9]*$" >nul 2>nul&&(
        set /a NumBas=%%~na/1000*1000
        set /a NumHaut=^(%%~na/1000*1000^)+999
        echo %%~a -^> !NumBas!-!NumHaut!
        IF NOT EXIST "!NumBas!-!NumHaut!" MD "!NumBas!-!NumHaut!"
        MOVE /Y "%%~a" "!NumBas!-!NumHaut!\%%~a" >nul
    )
)

您的计算无法正常工作的原因是 CLI 不支持浮点数。

当你在做的时候:

set /a NumBas=%%~na/1000*1000

您得到的是小数值。我怀疑您正试图利用这一点来尝试舍入该值。不幸的是,这不起作用,因为一旦你这样做 1/1000 它就是 0.0001 变成 0],这就是为什么您的 NumBas 在传递给下一个命令时变为零。

我还注意到您除以和乘以 1000,而不是 100。除以 100 将导致(一旦更正)您的文件被分类为数千:

1-1000
1001-2000
2001-3000

而不是像您在问题中所问的那样变成 100s,要更正,只需将 1000s 更改为 100s。

现在在浮点数上,解决这个问题的最简单方法是检查 NumBas 值是否 小于 1,如果是,则设为 1

IF !NumBas! LSS 1 Set /a NumBas +=1

此调整后的代码应该会产生您正在寻找的结果:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.txt) do (
    echo %%~na|FINDSTR /R /C:"^[0-9]*$" >nul 2>nul&&(
        set /a NumBas=%%~na/100*100
        IF !NumBas! LSS 1 Set /a NumBas +=1
        set /a NumHaut=!NumBas!+99
        echo %%~a -^> !NumBas!-!NumHaut!
        IF NOT EXIST "!NumBas!-!NumHaut!" MD "!NumBas!-!NumHaut!"
        MOVE /Y "%%~a" "!NumBas!-!NumHaut!\%%~a" >nul
    )
)

更简单:

@echo off
setlocal EnableDelayedExpansion

for %%a in (*.pdf) do (
   set /A "Num=(%%~Na-1)/100+1, NumBas=(Num-1)*100+1, NumHaut=Num*100"
   IF NOT EXIST "!NumBas!-!NumHaut!" MD "!NumBas!-!NumHaut!"
   MOVE /Y "%%~a" "!NumBas!-!NumHaut!\%%~a" >nul
)

如果您想要具有更简单 "Folder 1"、"Folder 2" 等名称的文件夹,只需使用 "Folder !Num!" 并删除 NumBas 和 NumHaut 变量。