展平目录

时间:2012-08-20 05:07:14

标签: batch-file

假设以下目录结构

my_script.bat
Dir1
   File1.txt
Dir2
   Dir3
      File1.txt

我想要展平它,以便我只有一个目录,其中每个文件名都以当前目录(我的批处理文件所在的位置)下面的所有父目录作为前缀。

如此扁平化以上列表会产生类似

的内容
Dir1-File1.txt
Dir2-Dir3-File1.txt

或者只是某种方式来识别它来自哪个文件夹,不一定要用连字符。

可以使用Windows批处理文件吗?或者可能已经有了它的命令?

2 个答案:

答案 0 :(得分:5)

我必须赞扬Jacob Seleznev的原始想法,但这里的解决方案还包括新文件名中的路径:

Setlocal EnableDelayedExpansion
for /r %%F in (*) do (
    set _name=%%~fF

    rem Change the path to a relative path by replacing the current folder with ""
    set _name=!_name:%cd%\=!

    rem Replace slashes with hyphens
    set _name=!_name:\=-!

    copy "%%F" ".\!_name!"
)

输出:

Dir1-File1.txt
Dir2-Dir3-File1.txt

答案 1 :(得分:2)

for /r %F in (*) do set name=%~pfF
set name=%name:\=-%
echo %name%