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

时间:2016-08-11 19:13:29

标签: file batch-file directory move

我需要一些帮助将文件移动到同名文件夹中。我有一个批处理文件,但它很慢。我将大约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健康中心文件夹。第一个代码将容纳它,但是非常慢并且随着它的进展而变慢。这是第二个代码:

@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这样的文件。我有像#34; 123456 Health Center"和#34; 123457 MLK中心"已经建立。我想要做的就是将所有这些.xlsx文件移动到相应的文件夹中。第一个代码集有效,但我说它很慢。它的作用是根据前6个字符查看是否有相应的文件和文件夹名称。如果有,则将文件移动到该文件夹​​。

第二个代码要快得多,但它不喜欢文件夹名称的第二部分,即"健康中心或MLK中心"从我的例子中,它然后创建自己的文件,只有数字部分,即我的例子中的123456或123457。

这有帮助吗?

1 个答案:

答案 0 :(得分:-1)

将此脚本作为 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