- 我使用外部程式生成字串
- 我需要找出字串中是否包含“not”這個詞
- 如果是這樣,我設定了某個變數以供以后使用。
1 和 2 作業沒有問題,但我不能讓 3 作業。
我的代碼:
SET EXE="path\to\program.exe"
for /f "delims=" %%i in ('%EXE% argument') do (
rem echo %%i
set mystatus=%%i
)
echo %mystatus%
^ 作業到這里 ^ -echo回傳正確的值。現在我想回傳一個更簡單的值,告訴我%mystatus%var中是否存在字串“not”
set "isNot="
ECHO.%mystatus%| FIND /I "not">Nul && (
Echo.Found "not"
do something
rem ^this works^
set isNot= "true"
) || (
Echo.Did not find "not"
do something
rem ^this works^
set isNot= "false"
)
現在,在查找之外,這沒有回傳:為什么?
echo %isNot%
uj5u.com熱心網友回復:
我找到了你的答案——比方說,天真。
首先,我無法重現您的結果。它對我來說非常有效,回傳isnot設定為 Space"false"或Space"true",而不是nothing.
如果isnot未定義,則echo回應應該是Echo is off,因此在您的測驗中isnot 已定義。我將echo %isNot% 用于此測驗,以便字串以明顯的分隔符顯示。如果它只包含空格 - 好吧,它們往往是非常不可見的。
至于解決方案,我建議
set "isnot="
if "%mystatus%" neq "%mystatus:not=%" set "isnot=Y"
避免find管道和條件,設定isnot為defined或not defined酌情準備好使用
if defined isnot (echo not was not found) else (echo not was found)
這樣做的原因是它if defined適用于變數的運行時狀態,因此它可以code block在變數可以從一種狀態切換到另一種狀態的情況下使用。
用于set "var=value"設定字串值 - 這可以避免尾隨空格引起的問題。不要分配終端\,Space或者"- 從元素構建路徑名 - 違反直覺,它可能會使程序更容易。
uj5u.com熱心網友回復:
愚蠢的錯誤,似乎。=設定變數后不應有空格。洗掉了空格,它可以正常作業。
uj5u.com熱心網友回復:
這可能是對您預期任務的猜測,但我的假設是您正在嘗試確定可執行命令是否回傳字串'path\to\program.exe' is not recognized as an internal or external command, operable program or batch file..
如果是這種情況,那么也許這對您來說是一個更好的整體解決方案:
@Set "exe=path\to\program.exe"
@For %%G In ("%exe%")Do @If "%%~aG" Lss "-" (Echo ERROR: No such object '%exe%')Else If "%%~aG" GEq "d" (Echo ERROR: '%exe%' is a directory object.)Else %%G argument
您需要更改的只是第1行的路徑和第2argument行末尾的字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/470188.html
