批处理文件,用于从文件名的一部分创建文件夹并移动文件。
我有很多文件需要在他们自己的子文件夹中。
他们采用以下格式: 实施例
123456-ABC-XYZ
123456-DFG-XYZ
123456-HIJ-XYZ
我想在哪里创建一个子文件夹,然后用8-10字符移动文件 或者通过12-14
将此作为我在Magoo发布的网站上找到的基础 它可以通过第一组字符(h:\ 1AAATEST =我的测试文件夹
)来完成@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
参考:Question from nearly a year ago
请注意,除了源目录的更改和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
它适用于为文件名的第1和第2部分制作目录和移动文件, 通过将md更改为&移动目标dir为文件名的第1部分& 通过将md改为b&将目标dir移动到b为文件名的第二部分&
但是将md更改为c&移动目标dir到c为文件名的第3部分& DOESN" T 工作。它创建了正确的目录,并且它不会移动文件,但会将文件范围缩短为XYZ。
建议将不胜感激。
答案 0 :(得分:0)
有一天,我收到了一个使用我发布的图书馆的人的愤怒电话,这是一个重大错误。实际上,它已被某人修改和重新发布,但没有注明图书馆来源中的人,时间或原因。这是我最后一次为我的商业作品发布源代码。
您遇到的问题非常简单。
for /f
审核LAST_FIRST_7-24-1936 Diagnostic - Topography 11-18-10_1
并将LAST_FIRST_7-24-1936
分配给%%a
和Diagnostic - Topography 11-18-10_1
分配给%%b
在您修改它的代码中,您正在执行MD %%b
,这将被解释为
MD Diagnostic - Topography 11-18-10_1
所以批处理会根据要求创建这四个目录。
然后遇到move
。目标目录为.\%%a\
,它将尝试将文件移动到.\LAST_FIRST_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
(此版本移动到包含中间字符块的目录 - 移动到结束块,在%%b
命令和目标中用%%c
替换MD
move
命令)
md
很可能会抱怨尝试创建现有目录。您可以通过将2>nul
附加到md
命令的末尾来关闭它。