我有一个目录,里面装满了以这种方式命名的文件夹:
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
非常感谢任何帮助。
答案 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
您还应该知道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