元のスクリプトは、行ごとに次のことを行います。
@echo on
コマンドプロンプトに、実行する前にバッチファイルの各コマンドを出力するように指示します。これは、実行前に実際に何が実行されているかを「確認」できるようにするためです。
cd "C:\Users\MVD21\Desktop\test"
Cの hangesは、D私はあなたがすべてのファイルをzip圧縮するパスであると思います何にirectory。
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
ここのパラメータIN
は(C:\Users\MVD21\Desktop\test)
です。これにより、ループの「本体」(キーワードの背後にあるアクションDO
)が1回だけ実行され、%i
パラメーターに値が割り当てられますC:\Users\MVD21\Desktop\test
。これがあなたの望むことをしないのは当然のことです!これは、ディレクトリ全体を単一の.7zファイルに圧縮するように見えます。
何も実行しない場合は、おそらくのパスが見つからないことが原因です7z.exe
。そのファイルが現在のディレクトリ(test
上記のディレクトリ)にない場合は、PATH
(%PATH%
環境変数の)上になければなりません。echo %PATH%
シェルで現在設定されているものを確認してください。それ以外の場合は7z.exe
、現在のディレクトリにコピーするか、その場所への絶対パス(たとえば、"C:\Program Files\7-zip\7z.exe" ...
)を指定する必要があります。
pause
スクリプトが完了すると、このキーワードはシェルに、すぐに終了するのではなく、Enterキーを押すかコマンドプロンプトを閉じるのを待つように指示するだけです。
バッチスクリプト(または、実際、コードを扱う他の何か)を構築しているときは、スクリプト全体を、理解できない(試みない)モノリシックコピー/ペーストとして扱うのをやめ、代わりに個別に理解できるサブパーツに問題を解決し、それらを一緒にフックします。これにより、他の誰かにすべての作業を依頼する代わりに、問題を個別に解決して解決策を作成できます。私はそれを強くお勧めします。
あなたの場合、あなたの問題の次のサブコンポーネントがあります:
- 特定のディレクトリに含まれる各ファイルを反復処理(ループスルー)します。
- 指定されたファイルごとに、
7z
ユーティリティを呼び出して.7zファイルに入れます。
特定のニーズを解決する回答がすでに出ている可能性は、より一般的な部分を個別に見つけることができる可能性よりも低くなります。
この質問、「バッチスクリプトでディレクトリ内の各ファイルに何かを行う方法」は、問題の半分を解決します。
答えの要点は、StackOverflowの答えのこの部分から始めることです。
for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f
そして、何かをしている部分(echo %%f
)を、やりたいことをするように変更します。スクリプトのテキストを分析し、各文字とパラメーターの意味を理解したので、その部分を変更する必要があることを知っています。自分のコードを挿入する場所を推測できます。
ここにいくつかの「エアコード」があります(試されていない!):
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"
上記の@echo on
and pause
ステートメントは適切な方法であるため、そのままにしておくことがcd
できます。ファイルがそのパスにある場合は、そのステートメントも保持することをお勧めします。
それでは、何が残っているのでしょうか?
@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause
「うまくいかない!」と返信しても、お役に立てません。これを試しても機能しない場合は、コメントで以下の情報を教えてください。
- どのような正確なエラーメッセージこれらのコマンドを実行すると、プロンプトのコマンドで取得したり、バッチファイルに入れ、それらを実行していますか?省略しないでください。出力を直接コピーして貼り付けます(大量の場合は、http://pastebin.comに置きます)。
- あなたは何を考えて、エラーメッセージが問題であることを言っていますか?
- 7-zipインストールはどこにありますか(ファイルパス)?
- 7-zipインストールのファイルの場所が
PATH
環境変数の内容に含まれていますか?(上記のようecho %PATH%
に、cmd
プロンプトでこれを確認してください。)