windows - 扫描文件名并将文件移动到名称源自文件名的目录和子目录

windows - scan filenames and move files to dirs and subdirs with names derived from filenames

我(不幸的是)有数千个文件需要重新组织到不同的文件夹方案中。 我的所有文件都遵循以下模式:

d:\mainfolder[=11=]01.pic\AMY_CAT_file1.jpg
d:\mainfolder[=11=]01.pic\EVE_CAT_file1.jpg
d:\mainfolder[=11=]02.pic\AMY_BIRD_file2.jpg
d:\mainfolder[=11=]02.pic\EVE_BIRD_file2.jpg

我正在寻找的是一个 *.bat 文件,它可以将文件移动到这样的文件夹中:

...\CAT_\AMY[=12=]01.pic\AMY_CAT_file1.jpg
...\CAT_\EVE[=12=]01.pic\EVE_CAT_file1.jpg
...\BIRD\AMY[=12=]02.pic\AMY_BIRD_file2.jpg
...\BIRD\EVE[=12=]02.pic\EVE_BIRD_file2.jpg

换句话说,必须移动文件:

  1. 进入以文件源目录命名的子文件夹
  2. 在以1st到3rd命名的文件夹内 符号,最后
  3. 在以文件名中第5到第8个符号命名的文件夹内

我意识到这听起来可能令人困惑,非常感谢任何帮助。

1st to 3rd symbol5th to 8th symbol 是个坏主意,因为名称的长度可能不同(参见 catbird,可能还有 elephant ; 或 EveAmy,可能还有 Stephan),但你有一个漂亮的下划线可以作为分隔符:

@echo off
setlocal EnableDelayedExpansion
cd /d "d:\mainfolder"
for /f "delims=" %%F in ('dir /s /b *.jpg') do (
  for /f "tokens=1,2,* delims=_" %%A in ("%%~nF") do (
    set folder=%%~dpF
    for %%X in (!folder:~0^,-1!) do (
      ECHO move "%%F" "...\%%B\%%A\%%~nxX\%%~nxF"
    )
  )
)