0

ディレクトリにファイルがあるかどうか、また別のスクリプトが呼び出されるかどうかを確認するバッチスクリプトを作成しようとしています。これが私が持っているものです:

@echo off

for /f %%A in ('dir /b "..\data\partials\processing"^| find /v /c ""') do set cnt=%%A


if %cnt% gtr 0 
(
    call otherscript.bat
) 

私がそれを実行するたびに私は得ます(そして私が試した百万の順列)

「コマンドの構文が正しくありません。」

しかし、プロンプトdir / b .. \ data \ components\processing|で同じコマンドを実行すると find / v /c""問題なく動作します。

私はBatchよりもBashに精通しています...誰か助けてもらえますか?

PS>PowerShellを提案しないでください。オプションではありません。既存のスクリプトを変更しています。

@echo off
call %~dp0..\config\script\set_environment.bat
copy %ENDECA_PROJECT_DIR%\test_data\partial\* %ENDECA_PROJECT_DIR%\data\partials\incoming
for /F %%i in ('dir /b "..\data\partials\processing\*.txt"') do ( call call %~dp0runcommand.bat --skip-definition PartialUpdate 2>&1 )
4

3 に答える 3

1

これを試して。いくつかの小さな変更を加えたものと非常によく似た、仕事を辞めようとしていることを確認する機会がありませんでした。

@echo off

for /F %%i in ('dir /b "c:\mydirectory\*.*"') do (
    call otherscript.bat
    goto :EOF
)

echo Folder is empty or does not exist
于 2013-03-08T16:57:06.083 に答える
1

実際のところ、ifコマンドの構文は正しくありません。開き角かっこは、と同じ行に配置する必要がありifます。

ただし、結果が0より大きいかどうかを確認するためだけにファイルをカウントしている場合は、別の方法を試すことができます。

(DIR /B "path" | FINDSTR . 1>NUL) && (
  command to run if the directory has files
) || (
  command to run if no file exists
)

前の&&コマンドがゼロ終了コードで終了した場合、次のコマンドまたはコマンドのブロックが実行されます。これ||は似ていますが、前のコマンドまたはコマンドのブロックがゼロ以外の終了コードで終了したかどうかをチェックします。

FINDSTR入力ストリームに何も見つからなかった場合、コマンドはゼロ以外の終了コードを設定します。検索語は単純に、任意の文字.を表すため、ゼロ以外の終了コードは、出力が空になった場合にのみ設定できます。これは、ファイルがなかったことを意味します。DIRpath

于 2013-03-08T17:45:03.187 に答える
0

空でないディレクトリはcntをファイル名に設定しないため、cntが空の場合、フォルダは空になります。

set cnt=
for  %%a in (..\data\partials\processing\*.*) do set cnt=%%a

if !%cnt%!==!! call otherscript.bat
于 2013-03-08T17:01:50.833 に答える