【问题标题】:Speed up Batch file processing, moving file to folder of same name加快批处理文件,将文件移动到同名文件夹
【发布时间】:2016-08-11 19:13:28
【问题描述】:

我需要一些帮助来将文件移动到同名文件夹中。我有一个可以工作的批处理文件,但速度很慢。我将大约 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 Health Center”和“123457 MLK Center”之类的文件夹。我想要做的是将所有这些 .xlsx 文件移动到相应的文件夹中。第一个代码集有效,但就像我说的那样很慢。它的作用是查看是否有基于前 6 个字符的相应文件和文件夹名称。如果有,它将文件移动到该文件夹​​。

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

这有帮助吗?

【问题讨论】:

  • 我不确定你为什么要使用所有这些 FOR 命令来做你正在做的事情。您能否提供一些输入文件名的示例以及您希望输出的外观。请通过编辑更新您的问题。
  • 我投票结束这个问题,因为它可能更适合Code Review

标签: file batch-file directory move


【解决方案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

【讨论】:

  • 如果该脚本适合您并且您将来需要更多帮助,请通过单击 UpvoteAccept 来回答答案框左侧的>向上箭头和选择标志。有些新手不知道这些有用的功能。 :)
  • 嗯,它几乎可以工作。它查看整个文件名,如果不存在具有该特定名称的文件夹,它会创建一个。我想做的是让它看前 6 个字符。所以我有一个文件 123456 Action List.xlsx 并且存在一个名为 123456 Health Center 的文件夹。我想将该 .xlsx 文件放在 123456 Health Center 文件夹中。这有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-08-03
  • 2017-06-07
  • 1970-01-01
相关资源
最近更新 更多