我有一个项目,其中包含以下步骤:
创建文件夹中的jpg文件列表(最初没有)。
如果创建的文本文件为空,请转到步骤1.
如果步骤1中创建的列表文件不为空,则启动另一个程序(此程序需要收到的jpg文件作为输入)。
JPG文件将由另一个进程发送到此文件夹。
我是新手使用批处理脚本并从输入中使用以下代码。 但是,即使收到JPG文件,该程序也没有按照步骤3的要求启动另一个进程。
我的代码出了什么问题?
@echo off
set "dir=E:\test"
set "file=%dir%\a.txt"
:start
dir/b *.jpg>a.txt
if "%~z1" == "" (
goto start
)
if "%~z1" == "0" (
goto start
)
if "%~z1" == "1" (
Start "" "C:\Users\vamsidhar muthireddy\Documents\Visual Studio 2010\Projects\database_test0\Debug\database_test0.exe"
)
答案 0 :(得分:2)
不要像内部命令那样命名变量。虽然还有命令 DIR ,但可以命名变量dir
,但这是不可取的。
不要像内部命令那样命名标签。虽然还有命令 START ,但可以命名标签start
,但这是不可取的。
为什么不建议将变量或标签命名为命令?
好吧,例如,如果将来某人想要找到使用变量dir
的位置,批处理文件还包含命令 DIR ,或想要重命名标签start
运行替换和批处理文件还包含命令 START ,这些操作变得困难,因为必须分析在每个找到的事件中使用的dir
和start
上下文。
批处理文件代码的语法突出显然不正确,命令 DIR 和 START 作为变量dir
,标签start
会最有可能也被强调为命令。
主要的编码错误是%~z1
,因为如果批处理文件的调用完全是一个文件名是一个批处理文件,那么它将被文件名的文件大小替换为调用批处理文件的第一个参数。现有文件。但这不是这种情况。这里的意图是获取列表文件的大小。 if "%~z1" == "1"
也几乎不会成真。如果指定为参数的文件的文件大小恰好为1个字节,则此条件才会成立。
这是一个注释的批处理代码,我认为这对该任务更有用:
@echo off
set "SourceDirectory=E:\test"
rem This loop is executed with a delay of 5 seconds between each loop run
rem until at least 1 file with extension JPG is found in the defined source
rem directory. Then the JPG file is processed and batch processing ends.
:Loop
echo Checking for a *.jpg file in %SourceDirectory% ...
if exist "%SourceDirectory%\*.jpg" goto ProcessFile
%SystemRoot%\System32\ping.exe 127.0.0.1 -n 6 >nul
goto Loop
:ProcessFile
for %%I in ("%SourceDirectory%\*.jpg") do (
echo Processing %%I ...
start "" "%USERPROFILE%\Documents\Visual Studio 2010\Projects\database_test0\Debug\database_test0.exe" "%%I"
)
rem Delete the created variable before exiting batch processing.
set "SourceDirectory="
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
echo /?
for /?
goto /?
if /?
ping /?
rem /?
set /?
start /?