2017-12-06 11 views
0

ターゲットファイルが存在しない場合は、以下のバッチコードを使用して特定のディレクトリ内のすべてのファイルを変換しますその内のすべてのサブマップとファイルを使用して(とそのサブマップと出力の相対保つ)これは相対ファイル性を維持しながらサブマップ内のすべてのファイルを出力フォルダに再帰的に解析する

は、だから私は現在、使用を:

for %%f in (input/textures/*.*) do (IF NOT EXIST "ouput/textures/%%~nf.dds" (
"bin/ThempImageParser.exe" "input/textures/%%f" "ouput/textures/%%~nf.dds" 
) 
) 

これは(意図していたとして)単一のフォルダのために完璧に動作し、それはすべて取りますその特定のフォルダにあるファイルを引数として渡して実行可能ファイルに渡します。そして、そのファイルを第2引数のパスに出力しますnt。

しかし、これにも欠陥があります(これはもう一つの問題です)。もし出力フォルダが存在しなければ動作しませんので、可能であれば必要に応じてフォルダを作成したいさあ。

私はバッチのドキュメントを見つけました(バッチの経験はあまりありません)。FORFILESと/ Rパラメータというコマンドを表示していますが、これを調整して相対パスを保持することはできませんでした出力についても、文字列の操作が必要になりますし、それを行う方法についての手がかりはありません。

だから私は後だ結果がこのようなもので、それはより深い例えば、「入力/テクスチャ/以外の任意のファイルを取ります。

input/textures/some/very/deep/submap/why/does/it/go/on/myfile.anyExtension 

それはそのファイル(および相対パス)を取る必要があり、基本的に「出力」と「入力」に変更し、このような.ddsとファイル拡張子置き換える:

ouput/textures/some/very/deep/submap/why/does/it/go/on/myfile.dds 

をし、私の実行可能ファイルに、これらの2つの文字列を渡す

+0

サブマップとは何ですか? Windowsの世界では、パスにバックスラッシュを使用しています。 – Squashman

+0

サブマップ/サブフォルダ/サブディレクトリ特定のルートフォルダの下にあるものは、私が間違った単語を選んだ場合、残念です。 また、バッチでも構いませんが、エクスプローラ自体に入力することもできます)、スラッシュ自体を解決するために使用するスラッシュは実際には問題になりません。 – Themperror

+0

スラッシュが付いている多くのものが真ですが、フォワードスラッシュで失敗するいくつかのWindowsコンソールコマンドがあります。私はバカファイルを書いている20年以上前から、私は何が起こっているのかを思い出すことはできません。 – Squashman

答えて

1
@ECHO Off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir\t w o" 
SET "destdir=U:\destdir\wherever\something" 

FOR /f "delims=" %%a IN ('xcopy /y /L /s "%sourcedir%\*"') DO (
SET "destfile=%%a" 
SET "destfile=!destfile:*%sourcedir%=%destdir%!" 
IF /i "%%a" neq "!destfile!" (
    FOR %%m IN ("!destfile!") DO IF NOT EXIST "%%~dpm%%~na.dds" (
    ECHO MD "%%~dpm" 
    ECHO "bin\ThempImageParser.exe" "%%a" "%%~dpm%%~na.dds" 
) 
) 
) 

GOTO :EOF 
を。 10

状況に応じてsourcedirdestdirの設定を変更する必要があります。

xcopy最初に、/Lオプションを指定して、xcopyでコピーされるファイルの個々のフルネームのみを一覧表示します。

%%aから見つかった各名前をdestfileに割り当て、そのファイル名からsource-directorynameの前にあるすべての文字を削除し、その文字列をコピー先ディレクトリ名に置き換えます。

これは、ファイルの宛先名(元の拡張子を含む)を生成します。唯一の例外は最後の出力行で、これはファイル数のレポートです。この行はであり、にはソースディレクトリ名が含まれていないため、置換は行われないので、%%a!destfile!と同じになります。

ここで、宛先ファイル名をメタ変数に割り当てて、さまざまな部分を選択できるようにします。宛先ドライブおよびパス名から作成されたファイル名、元ファイルの名前部分、および.ddsが存在しない場合は、希望の出力ファイル名を指定してimageparserを実行します。

これらの最後の2つは、テストの目的で実行される代わりにECHOであることに注意してください。実際にコマンドを実行するには、ECHO esを削除します。

/がスイッチインジケータであり、\がディレクトリセパレータであることに注意してください。

ディレクトリがすでに存在する場合、MDはエラーを報告することに注意してください。エラーメッセージを表示しないように2>nulmdコマンドの末尾に追加します。

+0

これは完璧に動作します、これは私が思い付くことができなかったものです! – Themperror

関連する問題