1

私はこれに慣れていないので、優しくしてください!

プログラムからファイル パスを取得して %1 に配置するスクリプトを実行していますが、この部分は機能しています。

%1 で ~$ を検索し、見つかった場合はファイルを削除する必要があります。

far のスクリプト:

set FILE_Path="%~1"  
ECHO "%FILE_PATH%" | FINDSTR "~$"  
IF..... **(not sure what to put in here)**  
DEL "%FILE_PATH%"  
PAUSE  

任意の助けをいただければ幸いです

ありがとうございました

4

2 に答える 2

1

条件付きで実行できます:

set FILE_Path="%~1"
ECHO %FILE_PATH% | FIND "~$" && DEL /q /f %FILE_PATH%
PAUSE

詳細はこちら: http://www.robvanderwoude.com/condexec.php

于 2013-05-15T21:13:09.983 に答える
1
@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関連する文字列をバイナリに変換し、数学を実行してから、結果を割り当てるときに文字列に変換します。

于 2013-05-16T00:58:24.783 に答える