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\partials\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命令将设置一个非零退出代码。由于搜索词很简单.,它代表任何字符,因此只有在导致空输出时才能设置非零退出代码DIR,这反过来意味着path没有任何文件。

于 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 回答