2012-04-13 9 views
0

シンプルなプログラムを作成しようとしました。 .pakファイル(この場合zipは変更されているが、変更されている)を見つけ、それらを抽出し、円弧を使用してそれらをパックする必要があります。少数のパスの後、バッチ・ループ・ミス・コマンド

@echo off 
for /r %%i in (*.pak) do ren %%~i %%~ni.arc 
for /r %%i in (*.arc) do (
mkdir %%~ni 
cd %%~ni 
..\arc.exe x -o+ "%%~i" //extract archive at current location// 
del "%%~i" 
..\arc.exe a -m9 -r "%%~i" *.* //pack files and folders in current folder and create 
archive at specific location// 
cd.. 
RD /s /q %%~ni 
) 
pause 

アークコマンドが正しく動作します。後で数回通過するまで、すべてが完璧に動作します。それは突然cdを実行することを停止するようだ。ファイルの

場所:
... \ arc.exe
... \ program.bat
... \ file1.pak
... \ folder1の\
file2.pak .. 。\フォルダ2 \私は

@echo off 
setlocal enableextensions enabledelayedexpansion 
for /r %%i in (*.pak) do ren %%~i %%~ni.arc 
for /r %%i in (*.arc) do (
mkdir %%~ni 
cd %%~ni 
..\arc.exe x -o+ "%%~i" 
del "%%~i" 
..\arc.exe a -m9 -r "%%~i" *.* 
cd.. 
RD /s /q %%~ni 
) 
pause 

も同じ結果を試みたパック

ため
などfile3.pak

+0

は痛みです。 PowerShellに切り替えることはできますか?もしそうなら、私はそれを調べることを提案する。 –

+0

いいえ、私は "逆"のプログラムをしたいのですが、誰かがaddidionalものをインストールしなくても使うことができます。 – user1331954

+0

サブフォルダはありますか? –

答えて

0

遅延拡張を有効にしたくないのは、!文字が含まれているとファイル名が壊れるからです。

あなたの問題は単にあなたのパス/ファイル名を引用していないと思います。 path/nameのスペースと特殊文字は、引用符で囲まれていないと問題を引き起こします。

これは完全にテストされていないですが、私はそれはあなたの問題を解決するかもしれないと思う:DOSのバッチファイルで少しでも複雑な何もして

@echo off 
for /r %%i in (*.pak) do ren "%%i" "%%~ni.arc" 
for /r %%i in (*.arc) do (
    mkdir "%%~ni" 
    cd "%%~ni" 
    ..\arc.exe x -o+ "%%~i" //extract archive at current location// 
    del "%%i" 
    ..\arc.exe a -m9 -r "%%i" *.* //pack files and folders in current folder and create archive at specific location// 
    cd.. 
    rd /s /q "%%~ni" 
) 
pause 
+0

返信ありがとうございます。 unfornatelyそれはまだ動作しません。ある時点で、それは特定のファイルを見つけることができないと言います。おそらくrd/s/qで "%%〜ni"です。それは多くのフォルダの裏側と1つのフォルダの内側に再び作成され、これのパスは非常に長いので、それらのすべてを開くこともできません。奇妙なのは、もし私が各ファイル(10でも)のフルパスを%%〜iと%% iのファイル名を使ってこのループを書き直せば... – user1331954

+0

多分問題は、.pakファイルの多くが同じ名前? – user1331954

関連する問題