Batch file 使用部分文件名将批处理文件移动到部分文件夹名字符串

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')

我有一个目录,目录中满是以这种方式命名的文件夹:

ABC-L2-0001\uuuu2ABC12345-0101

我需要将许多以这种方式命名的文件移动到与文件前9个字符匹配的文件夹中:

2ABC12345-0101.xyxyx.yxy.model

以下是我在阅读一些类似请求的老帖子的基础上所做的尝试,它对我不起作用

: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非常感谢您的帮助。如果这个答案对你有用,你可以核对一下;这样做会给你和我的代表分数。当你有足够的代表分数时,你也可以投票给这个答案。。。