web-dev-qa-db-ja.com

Windowsコマンドラインでforループを行う方法は?

これが可能かどうか疑問に思っていましたか?私はWindowsのコマンドラインの使用に精通していませんが、私が取り組んでいるプロジェクトのためにそれを使用する必要があります。いくつかのファイルがあり、それぞれの機能を実行する必要があります。私はpythonでの作業に慣れていますが、明らかにこれは少し異なっているので、助けを期待していました。

基本的には、フォルダー内の17個のファイルを反復処理し、それぞれに対して機能を実行し(プロジェクト用にここにある特定のソフトウェアを使用)、一意の名前のファイルを出力するためのforループが必要です(機能には通常、出力ファイル名を述べるために)私はそれを吸い込んで17のそれぞれについて手作業で行いますが、基本的にはファイルのデータベースを作成し、それを17のそれぞれと比較することですしかし、数百回。 forループを使用すると、作業時間を節約できます。

提案?

30
TheFoxx

コマンドラインインタープリターには、コマンドプロンプトまたはバッチファイル内から使用できるFOR構文があります。

あなたの目的のために、おそらく次のようなものが必要です:

FOR %i IN (*.ext) DO my-function %i

これにより、現在のディレクトリにある拡張子が* .extの各ファイルの名前がmy-function(たとえば、別の.batファイル)に渡されます。

(*.ext)部分は「filespec」であり、ファイルのセットを指定する方法に非常に柔軟です。たとえば、次のことができます。

FOR %i IN (C:\Some\Other\Dir\*.ext) DO my-function %i

別のディレクトリで操作を実行します。

一般にfilespecおよびFORには多数のオプションがあります。見る

HELP FOR

詳細については、コマンドプロンプトから。

41
Myk Willis

これは、探しているものを見つけるのに役立ちます... バッチスクリプトループ

私の答えは次のとおりです。

@echo off
:start
set /a var+=1
if %var% EQU 100 goto end
:: Code you want to run goes here
goto start

:end
echo var has reached %var%.
pause
exit

開始ラベルの下の最初のコマンドセットは、変数%var%が100に達するまでループします。これが発生すると、通知されて終了できるようになります。このコードは、100から17に変更してコードを入力するか、コメントを配置するバッチファイルのパス(Shiftキーを押しながらファイルを右クリックして[パスとしてコピー]を選択)を呼び出すコマンドを使用して、ニーズに合わせて調整できます。

5
Josh Girouard

ファイルまたはディレクトリとは無関係にループを実行するには、e。 g。 バッチスクリプトループ 、。ところでMSヘルプも役立つはずです(ただし、だれがそこを掘るのか)

1
Christian Gosch

_"_の追加を検討することもできます。

たとえば、for %i in (*.wav) do opusenc "%~ni.wav" "%~ni.opus"は非常に良いアイデアです。

0
Alice Vixie