【发布时间】:2019-06-28 17:41:43
【问题描述】:
我有大约 180K 文件需要根据文件名移动到文件夹中。 文件具有不同的扩展名。我需要获取所有以数字开头的文件名并获取数字直到第一个'-'并创建一个文件夹。移动文件夹中带有编号的所有文件。 需要排除不以数字开头的文件。
示例数据:文件名
123-ACBDHDJ.pdf 123-dhdjd.txt 5658-dgdjdk.txt 456477-gse.docx
例如;根据上面文件名中提到的上述数据,我想做以下事情:
- 制作文件夹123、5658和456477
- 移动文件夹 123 中的前两个文件,文件夹 5658 中的第三个文件和 文件夹 456477 中的最后一个文件。
尝试以下脚本:
@echo off
setlocal enabledelayedexpansion
for %%A in (*.psd *.jpg *.html *.tif *.xls *.xlsx *.htm *.csv *.pdf *.docx *.TXT *.zip *.msg *.xlsb *.eml *.*) do (
echo file found %%A
for /f "delims=" %%B in ("%%A") do set fname=%%~nB
for /f "delims=" %%C in ("%%A") do set fextn=%%~xC
for /f "tokens=1* delims=-" %%D in ("!fname!") do set folname=%%D
echo folder name !folname!
if not exist "!folname!" (
echo Folder !folname! does not exist, creating
md "!folname!"
) else (
echo Folder !folname! exists
)
echo Moving file %%A to folder !folname!
move "%%A" "!folname!"
)
echo Finished
pause
目前面临的问题:
- 也用字母数字字符创建的文件夹,我想 忽略这些文件,只选择以数字开头的文件。
- 脚本运行时间过长,性能很慢。数据量为 非常高,18 万条记录。
请为此提供批处理脚本或任何更快的方法来执行此操作,因为数据量非常巨大。提前致谢。
【问题讨论】:
-
你试过什么,你卡在哪里了?请分享您的编码尝试并准确描述您遇到的问题!阅读tour 以及这些帮助文章:How to Ask 和minimal reproducible example。目前,您的“问题”只不过是一个代码请求,这显然是题外话!谢谢!提示:
forloop、for /F、mkdir、move。 -
添加了尝试过的代码和面临的问题。
-
还有很多不必要的for循环,你循环每个扩展类型,但最终做所有扩展?此外,您从不测试数字,那么如果文件名为
test-file.eml怎么办? -
您应该考虑接受答案。
标签: windows batch-file cmd