存在する場合-拡張子のないファイル
-
02-01-2020 - |
質問
ファイル名に基づいてさまざまなファイルを移動する作業スクリプトが正常に実行されます。スクリプトが完了した後、次を使用して2つのディレクトリに残っているファイルがないかどうかをチェックします IF EXIST *.txt
.私は拡張子のないいくつかのファイルに気づいたことを除いて、これは素晴らこれらは以前は問題ではなく、私の制御不能なプロセスのためにそれを助けることができないので、私はスクリプトを修正する必要があります。
私の唯一のアイデアは次のコードです。二つの条件があるようにクマ:
:check1
PUSHD "\\UNC\path1" &&(
DIR /A-D *.
IF %errorlevel% NEQ 0 GOTO check2
) & POPD
:add1
ECHO Add note to the log file
:check2
PUSHD "\\UNC\path2" &&(
DIR /A-D *.
IF %errorlevel% NEQ 0 GOTO laststep
) & POPD
:add2
ECHO Add note to the log file
:laststep
Some other code before exiting
これは実行する必要があります DIR
パス上に拡張子のないファイルが存在する場合、それは持っています %errorlevel%
ゼロと次のチェックに移動します。がある場合 いいえ。 ファイルが存在し、それは持っています %errorlevel%
ゼロではなく(おそらく1)、次のチェックの前にログにテキストを追加します。チェック二つは同じことを行います。
これは非常に複雑であるように思われ、私は同じくらい簡単な"ワンライナー"ソリューションを見つけることができません IF EXIST
.私は私が使用することができます実現します *.
しかし、それはディレクトリも返し、誤った結果になる可能性があります %errorlevel%
.
更新されたコード
私は通常、私の変数を設定する場所、私も SET
実行する2つのパス DIR
に対して。このようにして、他の場所でより簡単に使用できます と 私は通常取得するUNCパスエラーをバイパスします-その理由は私には不明です。拡張子のないファイルにのみ使用される更新されたファイルチェックは、次のとおりです:
DIR %p1% /b /a-d|FIND /v "." && ECHO Found 1 >> %log%
DIR %p2% /b /a-d|FIND /v "." && ECHO Found 2 >> %log%
FINDSTR /I "Found" %log%
IF %errorlevel% EQU 0 GOTO stillthere
:nofiles
Some code
GOTO domore
:stillthere
Some code
:domore
Other code before exit
応答をありがとう、私はこれから学びました。
解決
これはあなたが見つけたいものですか?
dir /b /a-d |find /v "."
. 他のヒント
@ECHO OFF
SETLOCAL
:check1
PUSHD "u:\path1"
DIR /A-D *. >NUL 2>NUL
IF %errorlevel% EQU 0 ECHO Add note \path1 to the log file
POPD
PUSHD "u:\path2"
DIR /A-D *. >NUL 2>NUL
IF %errorlevel% EQU 0 ECHO Add note \path2 to the log file
POPD
:laststep
:: Some other code before exiting
GOTO :EOF
.
あなたの問題は次のとおりです:
Blockステートメント(a parenthesised series of statements)
内では、 ブロックが解析され、が実行されます。ブロック内の任意の%var%
は、ブロックが解析されるまでの変数の値に置き換えられます。ブロックが実行される前に - ブロックが実行される前に、同じことがFOR ... DO (block)
に適用されます。
従って、IF (something) else (somethingelse)
が%variables%
に遭遇したときのIF
の値を使用して実行されます。
潜在的にPUSHD/POPD
ブラケットからジャンプしているため、POPD
を意味するのではなく、必ず起動ディレクトリを復元します。
(私は私のシステムに合わせてサーバーではなくu:\
を使用しました)
あなたはすでに使用しています &&
確認するには PUSHD
働いた。あなたはあなたと同じことをすることができます DIR /-D
.私はそれが人生を楽にすることがわかります。また、次の場合には、エラーメッセージを非表示にしたいと思うかもしれません *.
特にそれが予想される状態であるため、見つかりません。私はまた、見つかった可能性のあるファイルの表示を隠しましたが、あなたは確かにそのリダイレクトを取り除くことができます。また、PUSHDが失敗した場合にエラーメッセージを非表示にすることもできますが、実装していませんでした。
PUSHD "\\UNC\path1" && (
DIR /A-D *. 1>nul 2>nul && ECHO Add note to the log file
POPD
)
PUSHD "\\UNC\path2" && (
DIR /A-D *. 1>nul 2>nul && ECHO Add note to the log file
POPD
)
ECHO Some other code before exiting