1

次のように、ファイルの名前を変更し、バッチファイルを使用してライブラリに転送したいと思います。

c:\jg_Folder_xy>
blabla01_000.bla --> blabla01_001.bla
blabla02_000.bla --> blabla02_001.bla
blabla03_000.bla --> blabla03_001.bla

c:\sj_Folder_mx>
blabla01_000.bla --> blabla01_002.bla
blabla02_000.bla --> blabla02_002.bla
blabla03_000.bla --> blabla03_002.bla

c:\an_Folder_kj>
blabla01_000.bla --> blabla01_003.bla
blabla02_000.bla --> blabla02_003.bla
blabla03_000.bla --> blabla03_003.bla

そして、すべてを新しいフォルダに転送するよりも

c:\New_Folder>
blabla01_001.bla
blabla01_002.bla
blabla01_003.bla
blabla02_001.bla
blabla02_002.bla
blabla02_003.bla
blabla03_001.bla
blabla03_002.bla
blabla03_003.bla

誰もが最も効率的な方法を知っていますか?

注:フォルダ名には、共通のサブ文字列が1つだけあります

4

1 に答える 1

3

どうやってするの

バッチでの簡単なソリューションは次のとおりです。

@echo off
setlocal enabledelayedexpansion
set "SRC_PATH=c:\jg_Folder_xy"
set "DEST_PATH=c:\New_Folder"
for %%f in ("%SRC_PATH%"\*.bla) do (
    set fname=%%~nf
    set fbase=!fname:~0,-4!
    set findex=!fbase:~-2!
    move %%f "%DEST_PATH%"\!fbase!_0!findex!%%~xf
)

注:このスクリプトは、各ソース フォルダーで個別に実行する必要があります (SRC_PATH毎回変更します)。forまたは、次のように、ループを二重ループに変更できます。

for /d %%d in (*_Folder_*) do for %%f in ("%%d"\*.bla) do (

必要なすべてのフォルダー内のすべてのファイルを自動的に反復処理するようにします (SRC_PATH行は必要ありません)。

使い方

ループは、ソース フォルダー内のファイルを反復処理し、反復ごとforにファイル名 (フル パスを含む) を割り当てます。%%f

set fname=%%~nfファイル名を抽出し、拡張子を削除します。

set fbase=!fname:~0,-4!最後の 4 文字を除くすべてを取得します (つまり、"_000" を削除します)。
これは基本的に、例では「blabla01」、「blabla02」などのベースファイル名を抽出します。

set findex=!fbase:~-2!から最後の 2 文字fbase、つまり実行中のインデックスを抽出します。
実行中のインデックスは正確に 2 文字であると見なされます。

このmoveコマンドは、ファイルの名前を変更し、それらを宛先フォルダーに移動します。

お役に立てれば。

于 2012-08-21T07:05:14.223 に答える