web-dev-qa-db-ja.com

ファイル名の先頭にフォルダ名を追加する

私は以下のようなディレクトリ構造を持っています:

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つのサブフォルダー名のみを取得し、フォルダーに関係なくファイル名の先頭に配置することです。

6
shekhar

ReNamer を使用し、単一の名前変更ルールを使用して、よりユーザーフレンドリーな方法でこれを行うことができます。

  1. プレフィックスとして「:File_FolderName:_」を挿入します(拡張子をスキップします)

プリセットとして保存して、 コマンドラインの名前変更 に使用することもできます。

enter image description here

4
dezlov

直接の子フォルダー内のファイルのみの名前を変更するには

@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回だけ実行するようにしてください。ファイルの前に複数のプレフィックスを付けたくない:-)

複数回実行しても安全にするために、コードを追加することができます。

3
dbenham

サブフォルダー内のファイルの名前を変更したい場合は、これが解決策です。

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
1
shekhar

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}

スクリプトを実行すると、すべてのファイルの名前がディレクトリ名プレフィックスに変更されます。

1
Richard