2
   1 echo off
   2 
   3 echo Please enter a date
   4 set /p a=
   5 echo %a%
   6 for /D %%d in (M:\Serienbriefauftrag\*) do (
   7 if not exist %%d\Erledigt\*.bat echo %%d
   8 )
   9 pause
  10 for /d %%b in (dir M:\Serienbriefauftrag\%%d /T:C) 
  11 echo %%b
  12 pause

コードは 10 行目 (構文エラー) まで正常に動作します。目的は、フォルダの作成日を取得して「%a%」と比較し、入力された日付「%a%」の下にある場合は、フォルダを移動する必要があることです。 . しかし、どういうわけか...

作成日を取得する方法を見つけました

if not exist %%d\Erledigt\*.bat echo %%~td|findstr /i /l

新しいタスクは、出力を「計算可能」にすることです

4

1 に答える 1

1

2つのこと:

1)10行%%d目は、最初のループ(定義されている場所)のスコープが8行目に残っているため、未定義(空)です。%%dループの終了後に使用できるように別の変数を設定できますが、注意してください。 。バッチsetでinforループを使用するのは少し注意が必要です。遅延変数展開のひどい使用を回避するために、作業を行っている間、ループの内側にとどまることをお勧めします。

@echo off
set /p a=Please enter a date: 
for /d %%d in (M:\Serienbriefauftrag\*) do (
    if not exist %%d\Erledigt\*.bat (
        :: Do whatever you want with %%d in here
        echo "%%d"
    )
)
pause

2)2番目のループの構文が間違っています。doループ本体の前が欠落しているため、ループ/dで指定されたディレクトリ内のすべてのフォルダを反復処理できます。dir M:\Serienbriefauftrag\%%d /T:Cディレクトリではなくコマンドです。そのコマンドの出力を繰り返し処理する場合/fは、パランテシスの内容を使用して、そのように一重引用符で囲む必要があり('dir M:\Serienbriefauftrag\%%d /T:C')ます。

于 2012-11-15T14:39:30.713 に答える