【问题标题】:Move 1000 Files To Folders, Each 100 to 1 Folder Batch将 1000 个文件移动到文件夹,每个 100 到 1 个文件夹批处理
【发布时间】:2020-08-08 02:10:18
【问题描述】:

这个想法是将文件移动到文件夹中:

文件名:

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
    )
)

【问题讨论】:

  • 您必须在进行数学运算时从文件编号中减去 1,然后在数学运算后再加 1。类似于set /a numbas=^(%%~na-1^)/1000*1000 然后set /a numhaut=^(^(%%~na-1^)/1000*1000^)+1000

标签: windows batch-file batch-processing


【解决方案1】:

更简单:

@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
)

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

【讨论】:

    【解决方案2】:

    您的计算不起作用的原因是因为 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
        )
    )
    

    【讨论】:

    • 第一个文件夹从 1 开始但到 99 和第二个文件夹(100 到 199)有点工作。感谢您解释问题
    • @IsmailAMANI,它应该是 1-100,因为它将 NumBas 的值设置为 1,那么 NumHaut 是 1+99 = 100。下一个数字应该是 101-200。我很高兴您发现答案很有帮助。不要忘记标记答案。
    • 我明白了!非常感谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-28
    • 2015-09-28
    相关资源
    最近更新 更多