0

if and else in batch これを機能させるために何度も試しましたが、問題が見つからないようです。誰か助けてもらえますか?

FOR /R "C:\Program Files" %%a IN (.) DO
if exist "%%~a\yes.txt" (
    echo yes
) else 
(
    md Pictures
)
4

2 に答える 2

3

説明書を読むべし!
if /?

括弧は と同じ行になければならないと記述されていますELSE

FOR /R "C:\Program Files" %%a IN (.) DO (
  if exist "%%~a\yes.txt" (
    echo yes
  ) else (
    md Pictures
  )
)
于 2012-08-22T10:42:32.517 に答える
1

cmdシェルの構文では、「()」がまだ開いていない限り、コマンドは行末で終了します。したがって、上記のコードでは、次の行

FOR /R  "C:\Program Files" %%a IN (.) DO

完全なforループです-ループしてDO何もしていません。コマンドを別の行に続けるにはFOR、「(」を追加する必要があります。

FOR /R  "C:\Program Files"  %%a IN (.) DO (

Ifこれで、ステートメントを使用してコマンドを続行できます。If同じことがあなたの声明にも当てはまります。入力しました

if exist "%%~a\yes.txt" (
    echo yes
) else 

したがって、行末の「(」は、の行IFの一致する「)」まで続きますが、同じ行のelse後に「(」がない場合、コマンドは終了し、構文的に正しくありません。elseif

しかし、あなたのコードが本当にあなたが望むことをしているのかわかりません。コマンドを実行したディレクトリに「Pictures」ディレクトリを作成しようとします。また、ファイルを含まない「C:\ Programfiles」のサブディレクトリが見つかるたびに、繰り返し作成しようとします。 "yes.txt"(これはたくさんのディレクトリになります)。したがって、最初に「tmp」を作成すると、それ以降のすべての試行でエラーメッセージが表示されます。

ここで重要なのは、ループがディレクトリ名を%% aに割り当てることですが、そのディレクトリには「CD」が割り当てられないため、ループを開始するディレクトリに「入った」ままです。

あなたは実際に何をしようとしていますか?

于 2012-08-24T21:41:28.950 に答える