0

%variable% を使用して、バッチ ファイルの IF.. THEN.. ELSE の条件節を管理したいと考えています。次のようなもの:

set variable=%%homedrive%% EQU C:
if %variable% (
   echo test ok
   ) else (
   echo test fail
   )

私がコマンドコンソールに書いた場合:

set test=1 equ 1
if %test% echo OK

できます!

/f cicle で使用します: これは私の疑似コードですこれは修正するための私の疑似コードです

(
 rem echo "%systemdrive%;;"
 echo "%%COMPUTERNAME%% EQU [x];[some parameters1]"
 echo "%%USERNAME%% NEQ [y];[some parameters2]"
 echo "%%LOGONSERVER%% EQU [z];[some parameters3]"
 [..]
) > "%temp%\CSG_fs.tmp"
[..]
for /f "usebackq tokens=1-2* delims=;" %%a in ("%temp%\CSG_fs.tmp") do (
    set cond=%%a& set cond=!cond:~1!
    set parm=%%b& set parm=!parm:~0,-1!
    echo   -   cicle: "!cond!" --^> "!parm!" 
    call if !cond! call:CSG_sub_fs !parm!
    echo    -  done
    )
goto:eof
:CSG_sub_fs
[..]
goto:eof

- 編集 -

変数 !cond! を使用するにはどうすればよいですか? CSG_sub_fs への呼び出しを実行するかどうかを決定するには?

call if !cond! call:CSG_sub_fs !parm!

「指定されたバッチラベルが見つかりません-IF」が返されるため、機能しません

そして、私が使用する場合

if !cond! call:CSG_sub_fs !parm!

「call:CSG_sub_fs not expected」と表示されます

4

1 に答える 1

0

うーん、質問がないようなので、答えるのは簡単ではありません。

問題があります

echo "^%COMPUTERNAME^% EQU [x];[some parameters1]"

^エスケープしないため-%エスケープ%-%使用%%COMPUTERNAME%%...

TYPE( 「%temp%\CSG_fs.tmp」を実行するだけでこれを確認できたはずです。

次の問題は、

for /f "tokens=1-2* delims=; usebackq" %%a in (%temp%\CSG_fs.tmp) do (

は、スペース、セミコロン、またはコンマを含まない%temp%\CSG_fs.tmp提供されたファイルを処理する場合があります。%temp%\CSG_fs.tmpこれらのデフォルトの区切り文字、または特別な意味を持つその他の特定の文字が含まれている場合は、ファイル名を二重引用符で囲み、オプション"%temp%\CSG_fs.tmp"を使用する必要がありusebackqます。

使用しようとしましたが、使用する場合はオプションである必要がありusebackqます。あなたのコードは区切り文字として" ", " ", " ", " ", " ", " "," "," "," " と " " を設定します。DELIMSLAST;usebackq

その上で、何を目指しているのかを説明していただければ、適切なコードを考案できるかもしれません。


これを試して:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CLS

REM I'm setting these variables for testing.
REM That isn't ususally a good idea but the SETLOCAL
REM will ensure they are restored on exit

SET computername=[x]
SET logonserver=[z]


(
 rem echo "%systemdrive%;;"
 echo "%%COMPUTERNAME%% EQU [x];[some parameters1]"
 echo "%%USERNAME%% NEQ [y];[some parameters2]"
 echo "%%LOGONSERVER%% EQU [z];[some parameters3]"
) > "%temp%\CSG_fs.tmp"
for /f "usebackqtokens=1-2* delims=;" %%a in ("%temp%\CSG_fs.tmp") do (
    set cond=%%a& set "cond=IF !cond:~1! CALL :csg_sub_fs "
    set parm=%%b& set parm=!parm:~0,-1!
    CALL :varcmd "!cond!" "!parm!"
    )
GOTO :eof

:varcmd
%~1 %~2
GOTO :eof

:csg_sub_fs
ECHO parameters supplied to csg_sub_fs were: %*
GOTO :eof

サブルーチン呼び出しをトリガーするために、使用した条件と一致するように変数名を強制しました。コンセプトを証明するために必要に応じて変更してください。

不完全な英語について心配する必要はありません。私はあなたの言語でうまくやれないと確信しています!

于 2013-04-04T12:09:39.003 に答える