私は以下のようなディレクトリ構造を持っています:
Folder
> SubFolder1
> FileName1.abc
> Filename2.abc
> .............
> SubFolder2
> FileName11.abc
> Filename12.abc
> ..............
> ..........
など。サブフォルダー内のファイルの名前を次のように変更します。
SubFolder1_Filename1.abc
SubFolder1_Filename2.abc
SubFolder2_Filename11.abc
SubFolder2_Filename12.abc
つまり、ファイル名の先頭に区切り文字「_
」を付けてフォルダ名を追加します。ディレクトリ構造は変更しないでください。注:ファイル名の先頭は同じです。例えば上記の場合、ファイル*。
以下のスクリプトを作成しました
for /r "PATH" %%G in (.) do (
pushd %%G
for %%* in (.) do set MyDir=%%~n*
FOR %%v IN (File*.*) DO REN %%v "%MyDir%_%%v"
popd
)
上記のスクリプトの問題は、1つのサブフォルダー名のみを取得し、フォルダーに関係なくファイル名の先頭に配置することです。
ReNamer を使用し、単一の名前変更ルールを使用して、よりユーザーフレンドリーな方法でこれを行うことができます。
プリセットとして保存して、 コマンドラインの名前変更 に使用することもできます。
直接の子フォルダー内のファイルのみの名前を変更するには
@echo off
pushd "Folder"
for /d %%D in (*) do (
for %%F in ("%%~D\*") do (
for %%P in ("%%F\..") do (
ren "%%F" "%%~nxP_%%~nxF"
)
)
)
popd
子フォルダ内のすべてのファイルの名前を再帰的に変更するには
@echo off
pushd "Folder"
for /d %%D in (*) do (
pushd "%%D"
for /r %%F in (*) do (
for %%P in ("%%F\..") do (
ren "%%F" "%%~nxP_%%~nxF"
)
)
popd
)
popd
どちらかのスクリプトを1回だけ実行するようにしてください。ファイルの前に複数のプレフィックスを付けたくない:-)
複数回実行しても安全にするために、コードを追加することができます。
サブフォルダー内のファイルの名前を変更したい場合は、これが解決策です。
for %%f in (.) do set "A=%%~dpnxf\"
for /r "%A%" %%f in (.) do call :func "%%~f"
goto :EOF
:func
set "B=%~1"
for %%g in ("%B%") do set "C=%%~dpnxg"
for %%g in ("%C%") do set "D=%%~nxg"
cd %C%
set "k=%C%\"
if NOT %A%==%k% FOR %%v IN (*.*) DO REN "%%v" "%D%_%%v"
goto :EOF
WindowsPowershellを使用して簡単に行うことができます。これは、ファイル名がサブフォルダー名のプレフィックスを取得する方法で、サブフォルダー内のすべてのファイルの名前を変更する2行のスクリプトです。ドライブDのこの単純な構造を考えてみましょう。
D:\ folder1\Sub1
Sub1 - AAAA.txt
Sub1 - BBBB.txt
Sub1 - CCC.txt
D:\ folder1\Sub2
0 AAAAA.txt
0 CCCC.txt
スクリプトは次のとおりです。
PS C:\ Users\User> cd D:\ folder1
PS D:\ folder1> get-childitem -recurse |名前の変更-アイテム-NewName {$ 。Directory.Name + "-" + $。Name}
スクリプトを実行すると、すべてのファイルの名前がディレクトリ名プレフィックスに変更されます。