2

次のディレクトリ構造を仮定します

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

各ファイル名の前に、現在のディレクトリ (バッチ ファイルが置かれているディレクトリ) の下にあるすべての親ディレクトリが付けられるディレクトリが 1 つだけになるように、それをフラット化したいと考えています。

したがって、上記のリストを平坦化すると、次のようなものが生成されます

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

または、それがどのフォルダーから来たのかを特定する方法は、必ずしもハイフンでつなぐ必要はありません。

これは Windows バッチ ファイルで実行できますか? それとも、すでにそのためのコマンドがありますか?

4

2 に答える 2

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
于 2012-08-20T06:13:11.767 に答える
2
for /r %F in (*) do set name=%~pfF
set name=%name:\=-%
echo %name% 
于 2012-08-20T05:20:38.620 に答える