我正在尝试编写一个批处理脚本来检查目录中是否有任何文件,以及是否有另一个脚本调用。这就是我所拥有的:
@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 |中运行相同的命令时查找/ v / c“”它没有问题。
我对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 )
答案 0 :(得分: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
答案 1 :(得分: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
)
如果前一个命令或命令块以零退出代码终止,则&&
会导致以下命令或命令块运行。 ||
类似,但检查前一个命令或命令块是否以非 -zero退出代码结束。
FINDSTR
命令设置非零退出代码,如果它在输入流中没有找到任何内容。由于搜索字词只是.
,代表任何字符,只有在DIR
导致空输出时才能设置非零退出代码意味着 path
没有任何文件。
答案 2 :(得分:0)
非空目录不会将cnt设置为文件名,因此如果cnt为空,则该文件夹为空。
set cnt=
for %%a in (..\data\partials\processing\*.*) do set cnt=%%a
if !%cnt%!==!! call otherscript.bat