@ECHO OFF
SETLOCAL
set "FILE_Path=%~1"
IF NOT DEFINED file_path ECHO no File Path provided&GOTO :eof
ECHO %~1| FINDSTR "~$"
IF NOT ERRORLEVEL 1 ECHO DEL %FILE_PATH%
今 - いくつかの注意事項。
file_path
使用した設定set FILE_Path="%~1"
は機能しますが、変数file_path
(変数名は大文字と小文字を区別しません) を ((最初のパラメーターから引用符を引いたもの) を引用符で囲みます)
そのバージョンを再度引用符で囲んで (引用符を 2 倍にする) にエコーすることは、 のことをFINDSTR
行う必要があります。findstr
~$
FINDSTR
見つかった一致する文字列を忠実に報告し、errorlevel
見つかった場合は 0 に設定し、見つからない場合は 1 に設定します。
あなたが探している魔法のラインは
if not errorlevel 1 ....
なぜなら
if errorlevel 0 ....
will ALWAYS trigger -if errorlevel n
構文の意味if errorlevel is n OR GREATER THAN n
使用可能です
if %errorlevel%==0 ...
また
if %errorlevel% equ 0 ...
しかし、この構文は次のblock
ようなステートメントでは機能しません
for ... do (something & something else&if %errorlevel%==0 anotherthing)
このスキームには厄介な落とし穴があります。デフォルトでは、findstr
一致します。そのregular expressions
ため、文字列内のどこにも一致せず、文字列の末尾にfindstr "~$"
一致します。~
~$
どの一致が必要かは言わないので、実際に必要か(最後にfindstr "~$"
検索~
) またはfindstr /l "~$"
("~$" をどこかに検索) するか、またはおそらくFIND "~$"
目的に適しているか ( FIND
、ないFINDSTR
)を言うことはできません。
元に戻ると、あなたがしていたことは、文字列""parameter one""
をfindstrにエコーすることです-これは終わらない~
ため、決して見つかりません...
私が投稿file_path
したように、代入句全体を引用符で囲んで設定すると、変数が (エディターによって残された行の末尾のスペース) に設定されないようになります。バッチは浮遊スペースに非常に敏感であることに注意してください-変数名に含まれるSET
前にそれらを省略し、割り当てられた値に含まれる後にそれらを省略する必要があります-別の動物です-スペースを許容します... )=
=
SET /A
また、quote-count を適切な数 (必要な数のみ) に減らしました。バッチは常に文字列に対して機能します。例外なく。set /a
関連する文字列をバイナリに変換し、数学を実行してから、結果を割り当てるときに文字列に変換します。