1

私はこれを持っています:

>upperFolder
  >folder 0
    >file 0
    >file ...
    >file n
  >...
  >foldern
    >file 0
    >file ...
    >file n

...そしてこれが欲しい

>upperFolder
  >folder 0_file 0
  >folder 0_file ...
  >folder 0_file n
  >...
  >folder n_file 0
  >folder n_file ...
  >folder n_file n

例えば:

私はこれを持っています:

>Pictures
  >Wallpapers
    >Reaper
    >Skull
    >Night
  >Avatars
    >InuYasha
    >Battler
    >Valentino

...そしてこれが欲しい

>Pictures
  >Wallpapers_Reaper
  >Wallpapers_Skull
  >Wallpapers_Night
  >Avatars_InuYasha
  >Avatars_Battler
  >Avatars_Valentino

Windows cmd で大量のファイルの名前を変更するためにこれが必要です。すべてを手作業で行うのは難しくなっています。前もって感謝します。

4

3 に答える 3

2

ファイルを 1 レベルだけ移動する必要がある場合は、コマンド ラインから次のコマンドを実行します。

for /d %D in (*) do @for %F in ("%D\*") do @move "%F" "%D_%~nxF" >nul

バッチ スクリプト内でコマンドを実行する場合は、すべてのパーセントを 2 倍にします。

階層内のすべてのファイルを親フォルダーに再帰的に移動したい場合は、次のバッチ スクリプトが機能します。

for /f "eol=: delims=" %%D in ('dir /b /s /ad *^|sort /r') do (
  pushd "%%D"
  for %%F in (*) do move "%%F" "..\%%~nxD_%%F" >nul
  popd
)

したがって、次のようなディレクトリ構造

>Pictures
  moveFiles.bat
  pic1.jpg
  pic2.jpg
  >Avatars
    Battler.jpg
    InuYasha.jpg
    Valentino.jpg
  >Wallpapers
    pic1.jpg
    pic2.jpg
    >Nature
      Forest.jpg
      Ocean.jpg
    >Sports
      Baseball.jpg
      Basketball.jpg
      Football.jpg

なる:

>Pictures
  Avatars_Battler.jpg
  Avatars_InuYasha.jpg
  Avatars_Valentino.jpg
  moveFiles.bat
  pic1.jpg
  pic2.jpg
  Wallpapers_Nature_Forest.jpg
  Wallpapers_Nature_Ocean.jpg
  Wallpapers_pic1.jpg
  Wallpapers_pic2.jpg
  Wallpapers_Sports_Baseball.jpg
  Wallpapers_Sports_Basketball.jpg
  Wallpapers_Sports_Football.jpg
  >Avatars
  >Wallpapers
    >Nature
    >Sports
于 2013-06-06T22:18:59.037 に答える
1

echoこれを試して、出力を見て、問題がなければbeforeを削除してくださいmove:

@echo off&setlocal
set "startfolder=X:\path\upperFolder"
cd /d "%startfolder%"
for /d %%i in (*) do (
    for %%j in ("%%~i\*") do (
        if not exist "%startfolder%\%%~i_%%~nxj" (
        echo move "%%~fj" "%startfolder%\%%~i_%%~nxj"
        ) else echo ERROR: "%startfolder%\%%~i_%%~nxj" already exist.
    )
)

入力:

C:\UPPERFOLDER
├───フォルダ1
│ファイル11
│ファイル12
│ファイル13
│ファイル14
│ファイル15
│ファイル16
│ファイル17
│ファイル18
│ファイル19
│
├───フォルダ2
│ファイル21
│ファイル22
│ファイル23
│ファイル24
│ファイル25
│ファイル26
│ファイル27
│ファイル28
│ファイル29
│
├───フォルダ3
│ファイル31
│ファイル32
│ファイル33
│ファイル34
│ファイル35
│ファイル36
│ファイル37
│ファイル38
│ファイル39
│
├───フォルダ4
│ファイル41
│ファイル42
│ファイル43
│ファイル44
│ファイル45
│ファイル46
│ファイル47
│ファイル48
│ファイル49
│
├───フォルダ5
│ファイル51
│ファイル52
│ファイル53
│ファイル54
│ファイル55
│ファイル56
│ファイル57
│ファイル58
│ファイル59
│
├───フォルダ6
│ファイル61
│ファイル62
│ファイル63
│ファイル64
│ファイル65
│ファイル66
│ファイル67
│ファイル68
│ファイル69
│
├───フォルダ7
│ファイル71
│ファイル72
│ファイル73
│ファイル74
│ファイル75
│ファイル76
│ファイル77
│ファイル78
│ファイル79
│
├───フォルダ8
│ファイル81
│ファイル82
│ファイル83
│ファイル84
│ファイル85
│ファイル86
│ファイル87
│ファイル88
│ファイル89
│
└───フォルダ9
        ファイル91
        ファイル92
        ファイル93
        ファイル94
        ファイル95
        ファイル96
        ファイル97
        ファイル98
        ファイル99

..出力:

C:\UPPERFOLDER
│ フォルダ1_ファイル11
│ フォルダ1_ファイル12
│ フォルダ1_ファイル13
│ Folder1_File14
│ Folder1_File15
│ フォルダ1_ファイル16
│ Folder1_File17
│ Folder1_File18
│ Folder1_File19
│ Folder2_File21
│ Folder2_File22
│ Folder2_File23
│ Folder2_File24
│ Folder2_File25
│ Folder2_File26
│ Folder2_File27
│ Folder2_File28
│ Folder2_File29
│ Folder3_File31
│ Folder3_File32
│ Folder3_File33
│ Folder3_File34
│ Folder3_File35
│ Folder3_File36
│ Folder3_File37
│ Folder3_File38
│ Folder3_File39
│ Folder4_File41
│ Folder4_File42
│ Folder4_File43
│ Folder4_File44
│ Folder4_File45
│ Folder4_File46
│ Folder4_File47
│ Folder4_File48
│ Folder4_File49
│ Folder5_File51
│ Folder5_File52
│ Folder5_File53
│ Folder5_File54
│ Folder5_File55
│ Folder5_File56
│ Folder5_File57
│ Folder5_File58
│ Folder5_File59
│ Folder6_File61
│ Folder6_File62
│ Folder6_File63
│ Folder6_File64
│ Folder6_File65
│ Folder6_File66
│ Folder6_File67
│ Folder6_File68
│ Folder6_File69
│ Folder7_File71
│ Folder7_File72
│ Folder7_File73
│ Folder7_File74
│ Folder7_File75
│ Folder7_File76
│ Folder7_File77
│ Folder7_File78
│ Folder7_File79
│ Folder8_File81
│ Folder8_File82
│ Folder8_File83
│ Folder8_File84
│ Folder8_File85
│ Folder8_File86
│ Folder8_File87
│ Folder8_File88
│ Folder8_File89
│ Folder9_File91
│ Folder9_File92
│ Folder9_File93
│ Folder9_File94
│ Folder9_File95
│ Folder9_File96
│ Folder9_File97
│ Folder9_File98
│ Folder9_File99
│
├───フォルダ1
├───フォルダ2
├───フォルダ3
├───フォルダ4
├───フォルダ5
├───フォルダ6
├───フォルダ7
├───フォルダ8
└───フォルダ9
于 2013-06-06T22:33:08.373 に答える
0

これは、Windows では少しトリッキーです ;)

ただし、次の方法で実行できます。

「スキャン」する必要があるフォルダーの外に2つのバッチファイルを作成します。最初のファイルはfindfiles.batという名前にする必要があります

forfiles /p %1 /s /c "cmd /c if @isdir==FALSE %~p0\renameit.bat @relpath @file %1 %~p0\"

2 番目のものは renameit.bat という名前にする必要があります

@echo off
set oldname=%1
set oldname=%oldname:.\=%
set oldname=%oldname:"=%
set tmpname=%2
set newname=%oldname:\=_%
set newname=%newname:"=%

move "%4%3\%oldname%" "%4%3\%newname%"

これで、メイン フォルダーをパラメーターとして findfiles.bat を実行できるようになりました。(あなたの例では:写真)

たとえば、Pictures フォルダーが D:\ にある場合、D:\ に 2 つのバッチ ファイルを作成し、cmd に移動して実行します。findfiles.bat Pictures

しかし、注意してください!最初に実際のフォルダーのコピーでこれを実行してみてください! 私はあなたがあなたの写真や何かを失った責任を負いたくない ;)

唯一の欠点は、ファイルが移動された空のフォルダーになってしまうことですが、これは一緒に暮らすことができるものだと思います:)

于 2013-06-06T21:58:12.957 に答える