加快批处理文件处理,将文件移动到同名文件夹

Speed up Batch file processing, moving file to folder of same name

我需要一些帮助将文件移动到同名文件夹中。我有一个可以工作的批处理文件,但速度很慢。我将大约 3300 个 .xlsx 文件移动到名称相似的文件夹中。这是我到目前为止所拥有的:

@echo off
setlocal EnableDelayedExpansion
pushd "C:\New folder"
FOR %%G IN (*.xlsx) DO (
FOR /F "tokens=1 delims= " %%a IN ("%%G") do (
set "outFolder=%%a "
for /D %%i in (*.*) do (
  for /F "tokens=1 delims= " %%b IN ("%%i") do (
    if "%%a"=="%%b" set "outFolder=%%i"
  )
 )
if not exist "!outfolder!" md "!outfolder!"
move "%%G" "!outfolder!"
)
)
popd
pause

同样有效,但速度很慢。此代码将文件移动到文件夹,如果文件夹不存在,则创建它。

我找到了这段代码,它在一定程度上有效。以下代码似乎无法识别已经存在的文件夹,而是创建一个文件夹,即使一个文件夹已经存在。示例:我有文件 123456 Action List.xlsx,我想转到文件夹 123456 Health Center。第一个代码将适应它,但速度非常慢,并且随着它的进行而变慢。这是第二个代码:

@echo off &setlocal
for /f "delims=" %%i in ('dir /b /a-d *.xlsx') do (
set "filename1=%%~i"
setlocal enabledelayedexpansion
set "folder1=!filename1:~0,6!"
mkdir "!folder1!" 2>nul
move "!filename1!" "!folder1!" >nul
endlocal
)

感谢任何帮助。

@Squashman - 我会尝试解释得更好一些...

123456 Action List.xlsx
123456 Reportcard.xlsx
123456 CHCUP.xlsx
123456 Combo3.xlsx

123457 Action List.xlsx
123457 Reportcard.xlsx
123457 CHCUP.xlsx
123457 Combo3.xlsx

在 运行 各种宏之后,每个月我都会得到大约 3300 个这样的文件。我已经设置了“123456 健康中心”和“123457 MLK 中心”等文件夹。我要做的是将所有这些 .xlsx 文件移动到相应的文件夹中。第一个代码集有效,但就像我说的那样慢。它所做的是查看是否有基于前 6 个字符的相应文件和文件夹名称。如果有,它将文件移动到该文件夹​​。

第二个代码要快得多,但它不喜欢文件夹名称的第二部分,即我示例中的 "Health Center or MLK Center",然后它创建自己的文件,仅包含数字部分,即我示例中的 123456 或 123457 .

有帮助吗?

将此脚本作为 test.bat 保存在包含其他 .bat 文件的文件夹中,并从打开的 Cmd 提示符中保存 运行。 dir 值替换为包含 XLSX 文件的文件夹路径。该脚本假设在 dir 文件夹中创建了对文件进行排序的目标文件夹。如果有任何错误,请告诉我。

@echo off
setlocal enabledelayedexpansion
set "dir=C:\XLSX_Folder"
pushd "%dir%"
for /f "tokens=*" %%I in ('dir /b /a:-d "*.xlsx"') do (
    if not exist "%%~nI" md "%%~nI" 2>nul
    move "%%I" "%%~nI" >nul )
popd
exit /b