Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何批处理文件以从部分文件名创建文件夹并移动文件_Batch File - Fatal编程技术网

Batch file 如何批处理文件以从部分文件名创建文件夹并移动文件

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 (

批处理文件,从文件名的一部分创建文件夹并移动文件

我有很多文件需要放在自己的子文件夹中

它们的格式如下: 范例

我想在其中创建一个子文件夹,并将文件按字符8-10移动到其中 或者在12-14之前

将此作为我在Magoo发布的网站上找到的基础 它通过第一组字符(h:\1AAATEST=my test文件夹)来完成

@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