2017-05-13 10 views
0

これに類似しています:Iterate all files in a directory using a 'for' loopしかし、instedディレクトリ内の5番目のファイルを繰り返し処理する必要がありますか?それを行う最も賢い方法は何ですか? (forループである必要はない)バッチすべてのX番目のファイルを反復する

+2

は、カウンタを追加し、唯一のすべての5回の反復 –

+0

THXを行うが、なステートメントが – user1234

+1

あなたが「取得するつもりはない場合、私は「複雑」ちょうど1行を使用して好むとしませんシンプルな "解決策です。そのためには、 'for'や' dir'の組み込み機能が必要です。誰もできません。なぜなら、それは人が行う通常のことである "数ファイルごと"にする必要があるからです。そうではありません。カウンタ変数を使用します。 – SomethingDark

答えて

5

1つのライナー

set x=0 & for %a in (*) do @((>nul 2>nul set /a "x=(x+1)%5,1/x") || echo %a) 

それは

  • は、各ファイルについて

  • set x=0)カウンタを初期化しますフォルダ(for %a in (*) do

  • calcの出力とすべてのエラー(>nul 2>nul)が表示されていない場合は、カウンタを増やし、残りの値を5で割ります(set /a x=(x+1)%5)。これは1/xを計算するために、我々はまたしてみてください同じset /aインサイド第五ファイル(5/5 = 1 with a reminder of 0

  • のための第一、第二のためのファイル、2、...と、0を1にカウンタの値を設定します。これは、以前の1/x

  • に失敗した場合(ヒデ、 2>nul理由) x=0(第五のファイル)

  • 条件演算子||は(前に障害が発生した場合、次のコマンドを実行する)echo %aを実行エラーで失敗します

+1

'、1/x'のためにupvoting。遅延拡張を必要としないためにもう一度upvoteするでしょう。 – Stephan

1

なぜ誰もが1ライナーが複雑なタスクを解決したいと思う理由を理解できません。しかし、とにかく、ここであなたは以下のとおりです。

cmd /v:on /c "@for /f "tokens=1,* delims=[]" %a in ('dir /b /a-d^|find /n /v ""') do @set /a "x=%a %5">nul&@if !x!==0 @echo %a: %b" 
+0

thx申し訳ありませんが、自分自身を間違って表現しました。私は、「1つのライナー」を探していたので、ステップ変数(またはこのようなs)を追加する方法があることを望みました。私はそれが簡単ではないとは思わなかった。しかし、あなたのコードは正常に動作します。それにとても感謝しています。 – user1234

関連する問題