2016-05-16 4 views
0

私はこのプログラムが何をしているのか知っています。「!f:〜0,3!」とは何ですか?ループのコマンドライン引数で行うのですか?

SETLOCAL ENABLEDELAYEDEXPANSION 
for %%a in (*.eml) do (
    set f=%%a 
    set g=!f:~0,3! 
    md "!g!" 2>nul 
    move "%%a" "!g!" 
) 

が、私はこの議論がまったく同じものについて困惑している:

g=!f:~0,3! 

と "MD" コールの終わりに、この1:の説明について

2>nul 
+0

これは非常に広いです - ここの人々は、無努力で単なるコードの説明サービスとして扱われて好きではありません質問者から。あなたが理解していると確信しています。これらのコマンドのほとんどは、簡単にグーグルにすることができます。問題のある部分を明確にすることはできますか?それは 'g =!f:〜0,3!'ビットですか? (私もそれで混乱するだろう) –

+0

はい!その部分と '2> nul ' – jirostatic

+0

あなたが説明したいビットであることを編集して明確にするかもしれません。 –

答えて

2

set g=!f:~0,3!コマンドプロンプトウィンドウを開き、set /?を実行し、部分文字列参照と遅延拡張について説明する出力ヘルプを参照してください。 setに関するSS64の記事とsetに関するMicrosoftの記事もご覧ください。

set g=!f:~0,3!は、遅延環境変数展開を使用して、環境変数gに環境変数fの最初の3文字を割り当てます。

2>nulの説明については、Microsoftの記事Using command redirection operatorsを参照してください。このコードは、2番目の標準ハンドル(stderr)に書き込まれたすべてのメッセージをデバイスnulにリダイレクトします。つまり、すべてのエラーメッセージの出力はこのコードによって抑制されます。

コマンドmd(makeディレクトリ)は、作成するディレクトリがすでに存在する場合、エラーメッセージをstderrに出力します。 md "!g!" 2>nulのための別の解決策は、あなたのバッチコードで使用するコマンドを理解するための

if not exist "!g!\*" md "!g!" 

ことと、彼らがどのように動作するか、コマンドプロンプトウィンドウを開き、そこに以下のコマンドを実行し、完全にコマンドごとに表示されているすべてのヘルプページを読んでいましたが非常に注意深く

  • for /?
  • md /?
  • move /?
  • set /?
  • setlocal /?
+0

ありがとう@Mofi。それは私をたくさん助けました。 – jirostatic

関連する問題