0

次のUNIXシェルスクリプトをWindowsに変換しようとしています。

for strWorkerDirectory in $BASEDIR/worker01/applogs $BASEDIR/worker01/filtered   $BASEDIR/worker01/filtered/error-logs $BASEDIR/worker01/filtered/logs $BASEDIR/worker01/filtered/session-logs
do
  if [ ! -d $strWorkerDirectory ]; then
    mkdir -p $strWorkerDirectory
  fi
done

これまでのところ、私はこれを思いついた:

FOR %%strWorkerDirectory IN (%BASEDIR%worker01\applogs %BASEDIR%worker01\filtered %BASEDIR%worker01\filtered\error-logs %BASEDIR%worker01\filtered\logs %BASEDIR%worker01\filtered\session-logs) DO 
( 
IF exist %%strWorkerDirectory ( echo %%strWorkerDirectory exists ) ELSE ( mkdir %%strWorkerDirectory && echo %%strWorkerDirectory created)
)

しかし、ここで何かが間違っているというエラーメッセージが表示されます

"%strWorkerDirectory" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

ここでの正しい変換は何でしょうか?

4

1 に答える 1

3

2つの問題:

  1. 「ループ変数」は1文字のみを持つことができます。%%sたとえば、使用してみてください。FORループのタイプに応じて、名前に意味があることに注意してください(詳細についてはを参照FOR /?してください)。たとえば、 `FOR / F" tokens =..."``と一緒に使用した場合。あなたの場合、それは問題ではないはずです。
  2. オープニングブレースは、DO

完全な例:

FOR %%s IN (%BASEDIR%worker01\applogs %BASEDIR%worker01\filtered %BASEDIR%worker01\filtered\error-logs %BASEDIR%worker01\filtered\logs %BASEDIR%worker01\filtered\session-logs) DO (
IF exist %%s ( echo %%s exists ) ELSE ( echo mkdir %%s && echo %%s created)
)

^ヒント:過度に長い行を避けるために、行継続文字としてカレット()を使用できます。カレットの後に他の文字(空白さえも)が本当にないことを確認してください。

FOR %%s IN (%BASEDIR%worker01\applogs  ^
  %BASEDIR%worker01\filtered ^
  %BASEDIR%worker01\filtered\error-logs ^
  %BASEDIR%worker01\filtered\logs ^
  %BASEDIR%worker01\filtered\session-logs) DO (
    IF exist %%s ( echo %%s exists ) ELSE ( echo mkdir %%s && echo %%s created)
)

編集コメンター@dbenhamが指摘しているように、上記の行の継続は実際には必要ありません。

于 2012-06-18T10:28:34.540 に答える