在脚本编写方面,我是一个新手,但是我试图编写一个批处理脚本,该脚本运行一个命令以将png文件输出到打印机。我拥有的脚本可以很好地处理一个文件,但是当有多个文件时却不能。
有人可以指出我的正确方向吗?
@echo off
REM ___Change Directory to where Label Is Stored___
pushd C:\AFP\to
REM ___Create Variable to capture filename of any png file___
for /F %%a in ('dir /b *.png') do set FileName=%%~na.png
REM ___Now we have the filename as a variable, send it to printer using Zebra SSDAL___
\\172.16.100.2\nDrive\Prime_DPD_Label_Print\ssdal.exe /p "TSC DA200" send %FileName% >> C:\AFP\Log\Label_Printing_Log.txt
REM ___Copy PNG File to Backup Folder___
XCOPY /y /q /c C:\AFP\to\*.png C:\AFP\backup\
REM ___Delete PNF File from To Folder___
DEL C:\AFP\to\*.png
脚本运行时,第一个文件可以正常打印。随后的文件然后不打印,我从ssdal.exe命令得到“文件不存在”。为什么第一个作品可以工作,但随后的作品却不能工作?我希望for能够循环通过。
答案 0 :(得分:0)
@ECHO Off
SETLOCAL
REM ___Change Directory to where Label Is Stored___
pushd C:\AFP\to
REM ___Process all png files___
for /F "delims=" %%a in ('dir /b *.png') do (
REM ___Now we have the filename as "%%a", send it to printer using Zebra SSDAL___
\\172.16.100.2\nDrive\Prime_DPD_Label_Print\ssdal.exe /p "TSC DA200" send "%%a" >> C:\AFP\Log\Label_Printing_Log.txt
IF ERRORLEVEL 1 (
CALL ECHO SSDAL returned ERRORLEVEL %%errorlevel%% FOR "%%a"
) ELSE (
REM ___Move PNG File to Backup Folder___
IF EXIST "c:\afp\backup\%%a" (
ECHO MOVE "%%a" to backup skipped as file already exists IN backup
) ELSE (
MOVE "%%a" C:\AFP\backup\
)
)
)
POPD
GOTO :EOF
啊!使用Zebra打印机。小伙子!
此替换脚本应执行您想要的操作。
使用setlocal
命令来确保该批处理在批处理结束时对cmd
环境所做的任何更改都被丢弃。
delims=
设置为“无定界符”,因此for/f
会将%%a
设置为整个文件名,即使它包含空格或其他定界符。引用%%a
可确保将这些文件名作为一个单位保存在一起,而不是被解释为单独的标记。
我假设ssdal
负责任,在发生错误的情况下返回errorlevel
非零。 if errorlevel 1
表示错误级别当前是否为1
或大于1
,在这种情况下,将生成错误消息。如果我们不使用call echo ... %%varname%% ...
,则需要delayed expansion
来显示变量的 current 值(许多SO文章对此进行了解释)
否则,如果ssdal
成功,请检查backup
目录中文件名是否存在,然后move
在该文件名中或报告其已经存在。
当然,如果不需要我添加的功能,可以通过多种方法进行操作。我很高兴对此脚本进行调整以符合要求。