批处理文件与部分文件名一起移动到部分文件夹名称字符串

时间:2015-06-03 14:40:13

标签: batch-file

我有一个目录,里面装满了以这种方式命名的文件夹:

ABC-L2-0001 __的 2ABC12345-0101 _xxxx

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

2ABC12345-0101 .xyxyxyx.yxyxyxyxy.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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您交换了fileName和folderName的位置。您不会从文件名获取前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

您还应该知道forfor /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