我的问题是下载pdf文件并将所有文件发送到打印机。
我通过ftp正确下载,所有文件都进入我的本地目录:
文件名= FtpScript.ftp
open ftp.domain.com
username
password
!:--- FTP commands below here ---
lcd local/Directory
cd /remote/Directory
binary
mget "*.pdf"
prompt
disconnect
quit
然后,此批处理文件调用ftp脚本。
文件名= retrieve_print.bat
@ftp -i -s:"C:\Scripts\FtpScript.ftp"
set mm=%date:~4,2%
set dd=%date:~7,2%
set yy=%date:~-4%
IF NOT EXIST {C:\Users\print_test2\print_%mm%_%yy%}( mkdir C:\Users\print_test2\print_%mm%_%yy% )
IF NOT EXIST C:\Users\print_test2\print_%mm%_%yy%\uploaded_%mm%_%dd%_%yy%.txt (
@echo Uploaded Text -- Date: %date% Time : %time% >> C:\Users\print_test2\print_%mm%_%yy%\uploaded_%mm%_%dd%_%yy%.txt
)
IF NOT EXIST C:\Users\print_test2\print_%mm%_%yy%\printed_%mm%_%dd%_%yy%.txt (
@echo Printed Text -- Date: %date% Time : %time% >> C:\Users\print_test2\print_%mm%_%yy%\printed_%mm%_%dd%_%yy%.txt
)
REM LOOP THROUGH PDFs THAT WERE UPLOADED AND INSERT THE NAMES INTO THE UPLOADED_*_*.txt TEXT FILE
FOR %%x in ( C:\Users\print_test2\print_%mm%_%yy%\*.pdf ) DO (
findstr "%%~nxx" C:\Users\print_test2\print_%mm%_%yy%\uploaded_%mm%_%dd%_%yy%.txt
@ECHO Error level = %errorlevel%
@ECHO %%~nxx
@pause
IF NOT %errorlevel% == 0 (
@echo %%~nxx >> C:\Users\print_test2\print_%mm%_%yy%\uploaded_%mm%_%dd%_%yy%.txt
)
)
REM LOOP THROUGH PDFs THAT WERE UPLOADED AND PRINT THEM, THEN INSERT THEM INTO THE PRINTED_*_*.txt TEXT FILE TO SUPPRESS DUPLICATE PRINTS
FOR %%x in ( C:\Users\print_test2\print_%mm%_%yy%\*.pdf ) DO (
findstr "%%~nxx" C:\Users\print_test2\print_%mm%_%yy%\printed_%mm%_%dd%_%yy%.txt
@ECHO Error level = %errorlevel%
@ECHO %%~nxx
IF NOT %errorlevel% == 0 (
rem PRINT FUNCTION
@echo %%~nxx >> C:\Users\print_test2\print_%mm%_%yy%\printed_%mm%_%dd%_%yy%.txt
)
)
文本文件生成错误。我的想法是,我可以遍历print_test2 / print_%mm%_%yy%目录中可用的文件,查看我通过ftp收到的所有文件并将其记录到文本文件中。
当我尝试在文本文件中包含文件名时第二次运行脚本时,问题变得明显。我希望findstr函数返回%errorlevel%为0,但它不会检测文本文件中的字符串,并在我上传和打印的文本文件中再次附加所有文件名。
是否有更好的方法来记录收到的文件并仅打印pdf一次?
由于
答案 0 :(得分:3)
您的问题是%errorlevel%
值是在for内部获取的,因此在进入for循环之前,它被值替换。要获取errorlevel在每个迭代中具有的当前值,您必须使用延迟变量扩展,即将值括在感叹号中而不是百分比:!errorlevel!
并在程序开头插入此行:
setlocal EnableDelayedExpansion
为了更清楚地解决这个问题,请尝试以下方法:
set name=Value before FOR
for %%f in (*.pdf) do (
set name=%%f
echo %name%
)
然后再次尝试按echo %name%
更改echo !name!
。
答案 1 :(得分:0)
要考虑的一些想法:
IF NOT "%errorlevel%" == "0"
dir/b C:\Users\print_test2\print_%mm%_%yy%\*.pdf >> C:\Users\print_test2\print_%mm%_%yy%\printed_%mm%_%dd%_%yy%.txt