windows - 扫描文件名并将文件移动到dirs和subdirs,其名称来自文件名

时间:2016-01-10 15:51:00

标签: batch-file cmd copy filenames move

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

d:\mainfolder\0001.pic\AMY_CAT_file1.jpg
d:\mainfolder\0001.pic\EVE_CAT_file1.jpg
d:\mainfolder\0002.pic\AMY_BIRD_file2.jpg
d:\mainfolder\0002.pic\EVE_BIRD_file2.jpg

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

...\CAT_\AMY\0001.pic\AMY_CAT_file1.jpg
...\CAT_\EVE\0001.pic\EVE_CAT_file1.jpg
...\BIRD\AMY\0002.pic\AMY_BIRD_file2.jpg
...\BIRD\EVE\0002.pic\EVE_BIRD_file2.jpg

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

  1. 进入以文件源目录命名的子文件夹
  2. 位于第1个到第3个之后命名的文件夹中 符号,最后
  3. 位于文件夹中,该文件夹以文件名
  4. 中的第5到第8个符号命名

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

1 个答案:

答案 0 :(得分:0)

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