展平目录

MxL*_*evs 2 batch-file

假设以下目录结构

my_script.bat
Dir1
   File1.txt
Dir2
   Dir3
      File1.txt
Run Code Online (Sandbox Code Playgroud)

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

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

Dir1-File1.txt
Dir2-Dir3-File1.txt
Run Code Online (Sandbox Code Playgroud)

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

这可以用Windows批处理文件完成吗?或者也许已经有了它的命令?

Sim*_*zie 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!"
)
Run Code Online (Sandbox Code Playgroud)

输出:

Dir1-File1.txt
Dir2-Dir3-File1.txt
Run Code Online (Sandbox Code Playgroud)