我有一个具有以下文件名的文件列表
gml_对象_对象_A脚本_0.txt
gml_对象对象_B_脚本_1.txt
其中obj_A,obj_B是对象的名称,Script_0,Script_1 是文件名
我需要一个Windows批处理文件来创建基于对象名称的文件夹,然后将文件移动到每个文件夹并重命名
在上面的示例中,使用批处理文件后,我将拥有2个文件夹
文件夹obj_A,包含文件 Script_0.txt
文件夹obj_B,包含文件 Script_1.txt
到目前为止,我在这里遇到了一个不错的帖子How do I create folder from file name and move files into folder?
但是我不擅长使用Windows批处理命令,所以我不能修改它来满足我的需要
这是我的代码(这是不工作)
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "SourceDir=E:\TestBatch"
set "DestDir=E:\TestBatch"
for /F "eol=| delims=" %%A in ('dir /B /A-D-H "%SourceDir%\gml_Object_obj_*" 2^>nul') do (
for /F "eol=| tokens=2 delims=_" %%B in ("%%~nA") do (
md "%DestDir%\%%B" 2>nul
set "FileName=%%A"
call move /Y "%SourceDir%\%%A" "%DestDir%\%%B\%%FileName:~3%%"
)
)
endlocal
运行此代码后的结果是一个名为“Object”的文件夹,其中包含2个文件
_Object_obj_A_Script_0.txt
_Object_obj_B_Script_1.txt
1条答案
按热度按时间kgsdhlau1#
分析您的代码,
%%A
将包含文件名,例如gml_Object_obj_A_Script_0.txt
。%%B
被设置为%%~nA
的第二个以_
分隔的标记,即Object
。(~n
选取%%A
的n部分,因此在此无关紧要)使用
%%B
=Object
建立目标目录将
filename
设置为%%A
=gml_Object_obj_A_Script_0.txt
move
命令被调用。其中
filename
设置为gml_Object_obj_A_Script_0.txt
,因此move
文件名为gml_Object_obj_A_Script_0.txt
(前3个字符除外),因此为_Object_obj_A_Script_0.txt
看来Stephan已经错过了
call
关键字。所以-所以你的代码才会这么做。
我的代码:(我将使用您的directorynames)
%%E
将包含文件名,例如gml_Object_obj_A_Script_0.txt
。%%U
被设置为%%A
的第三个以_
分隔的标记,即obj
、%%V
到第四个、A
和%%W
到余数Script_0.txt
。使用
%%U_%%V
=obj_A
建立目标目录将执行
move
命令