【发布时间】: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