Batch file 如何批处理文件以从部分文件名创建文件夹并移动文件
批处理文件,从文件名的一部分创建文件夹并移动文件 我有很多文件需要放在自己的子文件夹中 它们的格式如下: 范例 我想在其中创建一个子文件夹,并将文件按字符8-10移动到其中 或者在12-14之前 将此作为我在Magoo发布的网站上找到的基础 它通过第一组字符(h:\1AAATEST=my test文件夹)来完成Batch file 如何批处理文件以从部分文件名创建文件夹并移动文件,batch-file,Batch File,批处理文件,从文件名的一部分创建文件夹并移动文件 我有很多文件需要放在自己的子文件夹中 它们的格式如下: 范例 我想在其中创建一个子文件夹,并将文件按字符8-10移动到其中 或者在12-14之前 将此作为我在Magoo发布的网站上找到的基础 它通过第一组字符(h:\1AAATEST=my test文件夹)来完成 @ECHO OFF SETLOCAL SET "sourcedir=h:\1AAATEST" PUSHD %sourcedir% FOR /f "tokens=1*" %%a IN (
@ECHO OFF
SETLOCAL
SET "sourcedir=h:\1AAATEST"
PUSHD %sourcedir%
FOR /f "tokens=1*" %%a IN (
'dir /b /a-d "*_*_*-*-* *.*"'
DO
(MD %%b MOVE "%%a %%b" .\%%b\)
POPD
GOTO :EOF
[来自Magoo的编辑说明:
这是不正确的。以下是我发布的内容:
@ECHO OFF
SETLOCAL
SET "sourcedir=c:\sourcedir"
PUSHD %sourcedir%
FOR /f "tokens=1*" %%a IN (
'dir /b /a-d "*_*_*-*-* *.*"'
) DO (
ECHO MD %%a
ECHO MOVE "%%a %%b" .\%%a\
)
POPD
GOTO :EOF
参考:
请注意,除了更改源目录和省略前面提到的echo
关键字之外,还有一些主要区别。OP在这个问题上的语法根本不起作用
]
我修改了它,结果和原来的一样
@ECHO OFF
SETLOCAL
SET "sourcedir=h:\1AAATEST"
PUSHD %sourcedir%
FOR /f "tokens=1*" %%a IN (
'dir /b /a-d "*-*-*.*"'
) DO (
MD %%a
MOVE "%%a %%b" .\%%a\
)
POPD
GOTO :EOF
再次,它用这个文件名创建了4个文件夹
LAST_FIRST_7-24-1936 Diagnostic - Topography 11-18-10_1
但是没有移动任何文件
1st folder = -
2nd = 11-18-10_1
3rd = Diagnostic
4th = Topography
@ECHO OFF
SETLOCAL
SET "sourcedir=h:\1AAATEST"
PUSHD %sourcedir%
FOR /f "tokens=1*" %%a IN (
'dir /b /a-d "*-*-*.*"'
) DO (
MD %%b
MOVE "%%a %%b" .\%%a\
)
POPD
GOTO :EOF
我得出了以下结论:
@echo off
for /f "tokens=1-3* delims=-," %%a in ('dir /b /a-d "*-*-*"') do (
(md "%%~nb" 2>nul)
(MOVE "%%a-%%b-%%c" "%%b"))
POPD
GOTO :EOF
它用于为文件名的第一和第二部分创建目录和移动文件,
将文件名的第一部分的md改为a&将target dir改为a&
将文件名的第二部分的md改为b&将targetdir改为b&
但是将文件名的第三部分的md更改为c&将目标目录移动到c&
不起作用它创建正确的目录,不移动文件,但将文件名缩短为XYZ
建议将不胜感激。有一天,我接到一个愤怒的电话,电话中有人使用了我发布的一个库,但它有一个重大错误。事实上,它是由一个人修改并重新发布的,但在库源代码中没有注明是谁、何时或为什么。这是我最后一次为我的商业作品发布源代码k 你所遇到的问题解释得很简单 /f的
for
检查LAST\u FIRST\u 7-24-1936诊断-地形图11-18-10\u 1
,并将LAST\u FIRST\u 7-24-1936
分配给%a
和诊断-地形图11-18-10\u 1
分配给%b
在您修改的代码中,您将执行MD%%b
,这将被解释为
MD Diagnostic - Topography 11-18-10_1
因此,batch会根据请求创建这四个目录
然后遇到移动
。目标目录是\%a\
,它将尝试将文件移动到\LAST\u FIRST\u 7-24-1936\
——一个不太可能存在的目录
因此-要解决此问题,请尝试按照原始代码中的指定,将MD%%b
替换为MD%%a
至于您对123456-ABC-XYZ
的要求,请尝试
@ECHO OFF
SETLOCAL
SET "sourcedir=h:\1AAATEST"
PUSHD %sourcedir%
FOR /f "tokens=1,2,*" %%a IN (
'dir /b /a-d "*-*-*"'
) DO (
MD %%b
MOVE "%%a-%%b-%%c" .\%%b\
)
POPD
GOTO :EOF
(此版本要移动到带有中间字符块的目录-要移动到结尾块,请在MD
命令和move
命令的目标中用%%c
替换%%b
)
顺便说一句,md
很可能会抱怨试图创建现有目录。您可以通过在md
命令末尾附加2>nul
将其关闭
@ECHO OFF
SETLOCAL
SET "sourcedir=h:\1AAATEST"
PUSHD %sourcedir%
FOR /f "tokens=1,2,*" %%a IN (
'dir /b /a-d "*-*-*"'
) DO (
MD %%b
MOVE "%%a-%%b-%%c" .\%%b\
)
POPD
GOTO :EOF