移动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 变量。
想法是将文件移动到如下文件夹:
文件名:
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 变量。