1

私はWindowsスクリプトに完全に慣れていません。大まかに読んで何が起こっているかを確認できますが、書き込みに関しては基本的にゼロです。これが私がやろうとしていることです。私は次のスクリプトを持っています

echo on

SET LOGNAME=%7
SET LOGNAME=%LOGNAME%.log

Set CURRDATE=%TEMP%\CURRDATE.TMP
Set CURRTIME=%TEMP%\CURRTIME.TMP

DATE /T > %CURRDATE%
TIME /T > %CURRTIME%

Set PARSEARG="eol=; tokens=1,2,3,4* delims=/, "
For /F %PARSEARG% %%i in (%CURRDATE%) Do SET YYYYMMDD=%%l%%k%%j%%i

Set PARSEARG="eol=; tokens=1,2,3,4* delims=:,. "
For /F %PARSEARG% %%i in (%CURRTIME%) Do Set HHMMSS=%%i%%j%%k%%l


sqlcmd -E -S %1 -d %2 -h-1 -b -w 1000 -Q "EXEC spTest %3,%4,%5 " -o %6Test_%YYYYMMDD%%HHMMSS%.DAT

IF ERRORLEVEL 1 GOTO FAILED

ECHO %YYYYMMDD% %HHMMSS% OK>>%LOGNAME%

GOTO END

:FAILED
ECHO %YYYYMMDD% %HHMMSS% FAILED>>%LOGNAME%

:END
EXIT /B %ERRORLEVEL%

残念ながら、ファイルのYYYYMMDD部分が欠落していることがあります(これが発生する理由はわかりません-非常にまれです-奇妙なネットワークグリッチである可能性があるとしか思えません)。私がやりたいのは、ifステートメントを使用して、YYYYMMDDが空の場合にデフォルトの日付に設定することです。コードに次の行を挿入していましたが、これでは何も起こりません。

if %YYYYMMDD% ==" " (set %YYYYMMDD% =20990101)

何かアドバイスはありますか?

4

1 に答える 1

2

IF ステートメントは 2 つの理由で失敗しています。比較が間違っていることと、SET の構文が間違っていることです。私はあなたが望むと信じています:

if "%YYYYMMDD%"=="" (set YYYYMMDD=20990101)

しかし、なぜ上記が必要なのかまったくわかりません。断続的な障害が発生する理由はわかりませんが、修正可能なはずです。

既存のコードを大幅に簡素化できることは知っています。DATE 値と TIME 値を取得するために一時ファイルを使用する必要はありません。動的変数%DATE%%TIME%必要な値を提供します。HELP SET使用可能な動的変数のリストを入力します。また、構文FOR /Fを使用して文字列を解析できIN("string")ます。コマンドHELP FORの完全な説明を入力します。

コードは次のように変更できます。

for /F %PARSEARG% %%i in ("%DATE%") do set YYYYMMDD=%%l%%k%%j%%i

for /F %PARSEARG% %%i in ("%TIME%") do set HHMMSS=%%i%%j%%k%%l

あなたの既存のPARSEARG定義は私には正しく見えません。割り当ても変更する必要があるかもしれません。あなたのロケール設定やご希望の出力形式がわからないので、変更方法を正確にお伝えすることはできません。

わからない場合は、 と で取得した形式%DATE%%TIME%、必要な形式を投稿してください。私 (または他の誰か) がさらに支援できます。

于 2012-05-01T16:23:01.280 に答える