Batch file 使用部分文件名将批处理文件移动到部分文件夹名字符串
我有一个目录,目录中满是以这种方式命名的文件夹: ABC-L2-0001\uuuu2ABC12345-0101 我需要将许多以这种方式命名的文件移动到与文件前9个字符匹配的文件夹中: 2ABC12345-0101.xyxyx.yxy.model 以下是我在阅读一些类似请求的老帖子的基础上所做的尝试,它对我不起作用Batch file 使用部分文件名将批处理文件移动到部分文件夹名字符串,batch-file,Batch File,我有一个目录,目录中满是以这种方式命名的文件夹: ABC-L2-0001\uuuu2ABC12345-0101 我需要将许多以这种方式命名的文件移动到与文件前9个字符匹配的文件夹中: 2ABC12345-0101.xyxyx.yxy.model 以下是我在阅读一些类似请求的老帖子的基础上所做的尝试,它对我不起作用 :start @echo off setlocal enableDelayedExpansion for /f "tokens=*" %%f in ('dir *.model /b')
:start
@echo off
setlocal enableDelayedExpansion
for /f "tokens=*" %%f in ('dir *.model /b') do (
set filename=%%f
set folder8=!filename:~13,9!
set "targetfolder="
for /f %%l in ('dir "!folder8!"*.* /a:d /b') do (
set targetfolder=%%l
)
if defined targetfolder move "!filename!" "!targetfolder!"
)
:end
任何帮助都将不胜感激。您交换了文件名和文件夹名的位置。您不会从文件名中选取前8个字符,而是13、9个字符,并且不会在文件夹名称的中间查找这些字符,而是在开头查找。检查此固定代码:
:start
@echo off
setlocal enableDelayedExpansion
for /f "tokens=*" %%f in ('dir *.model /b') do (
set filename=%%f
set folder8=!filename:~0,9!
set "targetfolder="
for /f %%l in ('dir "?????????????!folder8!*" /a:d /b') do (
set targetfolder=%%l
)
if defined targetfolder move "!filename!" "!targetfolder!"
)
:end
您还应该知道,for
和for/D
普通命令比for/F
与dir/B
命令组合使用效率更高
:start
@echo off
setlocal enableDelayedExpansion
for %%f in (*.model) do (
set filename=%%f
set folder9=!filename:~0,9!
set "targetfolder="
for /D %%l in ("?????????????!folder9!*") do (
set targetfolder=%%l
)
if defined targetfolder move "!filename!" "!targetfolder!"
)
:end
我还不了解原始文件名ABC-L2-0001_uu2abc12345-0101_xxxx到目标文件名2ABC12345-0101.xyxyx.yxyxy.model的映射。第二个名称是目录名吗?“xyxyxy…”是从哪里来的?很抱歉搞混了。目录名是第一个字符串ABC-L2-0001\uu 2ABC12345-0101\u xxxx。第二个名称是文件名。“xyxyxy”只是我在文件名前14个字符后面的一堆其他随机数字和字符的填充符。Aacini非常感谢您的帮助。如果这个答案对你有用,你可以核对一下;这样做会给你和我的代表分数。当你有足够的代表分数时,你也可以投票给这个答案。。。