Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ftp 批打印-批脚本-for循环中的findstr条件_Ftp_Batch File - Fatal编程技术网

Ftp 批打印-批脚本-for循环中的findstr条件

Ftp 批打印-批脚本-for循环中的findstr条件,ftp,batch-file,Ftp,Batch File,我手头的问题是下载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脚本 文件名=

我手头的问题是下载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脚本

文件名=检索_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


感谢您提出以下几点建议:

  • 我不确定FINDSTR命令之后的errorlevel是否会因为找不到字符串而非零
  • 即使errorlevel不是零,我认为在执行下一个命令时,该命令中的新errorlevel就会被设置
  • 在IF语句中,您可能需要将相等性签入分隔符的两边换行,例如
    IF非“%errorlevel%”==“0”
  • 你可以考虑在你把所有的文件都归入其中之后,让你的列表与众不同。这会让你在进来的路上省去一些逻辑。下面介绍了在DOS中使列表与众不同的一些代码:
  • 如果您使用#4中的技术,那么您只需在文件中列出一个目录(如下所示),然后在#4中使用独特的技术

  • dir/b C:\Users\print\u test2\print\u%mm%\u%yy%\*.pdf>>C:\Users\print\u test2\print\u%mm%\u%yy%\printed\u%mm%\u%dd%\u%yy%.txt
    需要考虑的一些想法:

  • 我不确定FINDSTR命令之后的errorlevel是否会因为找不到字符串而非零
  • 即使errorlevel不是零,我认为在执行下一个命令时,该命令中的新errorlevel就会被设置
  • 在IF语句中,您可能需要将相等性签入分隔符的两边换行,例如
    IF非“%errorlevel%”==“0”
  • 你可以考虑在你把所有的文件都归入其中之后,让你的列表与众不同。这会让你在进来的路上省去一些逻辑。下面介绍了在DOS中使列表与众不同的一些代码:
  • 如果您使用#4中的技术,那么您只需在文件中列出一个目录(如下所示),然后在#4中使用独特的技术

  • dir/b C:\Users\print\u test2\print\u%mm%\u%yy%\*.pdf>>C:\Users\print\u test2\print\u%mm%\u%yy%\print\u%mm%\u%dd%\u%yy%.txt
    您的问题是,
    %errorlevel%
    值在for内,因此它被进入for循环之前的errorlevel值替换。要获取errorlevel在每个for迭代中的当前值,必须使用延迟变量展开,也就是说,将该值用感叹号而不是百分数括起来:
    !错误等级
    并在程序开头插入此行:

    setlocal EnableDelayedExpansion
    
    要使此问题更清楚,请尝试以下操作:

    set name=Value before FOR
    for %%f in (*.pdf) do (
       set name=%%f
       echo %name%
    )
    

    然后再次尝试通过
    echo更改
    echo%name%
    !名字

    您的问题是,
    %errorlevel%
    值是在for中获取的,因此它被输入for循环之前的errorlevel值替换。要获取errorlevel在每个for迭代中的当前值,必须使用延迟变量展开,也就是说,将该值用感叹号而不是百分数括起来:
    !错误等级
    并在程序开头插入此行:

    setlocal EnableDelayedExpansion
    
    要使此问题更清楚,请尝试以下操作:

    set name=Value before FOR
    for %%f in (*.pdf) do (
       set name=%%f
       echo %name%
    )
    

    然后再次尝试通过
    echo更改
    echo%name%
    !名字

    1。是,如果找不到字符串,FINDSTR将返回非零errorlevel值。2.在.BAT文件中,ECHO和PAUSE命令不会修改errorlevel。3.当比较errorlevel值时,仅当值可能包含空格或其他特殊字符时,才需要分隔符。嘿,Marc,4中的技术很好地解释了setlocal EnableDelayedExpansion。尤其是与。谢谢1.是,如果找不到字符串,FINDSTR将返回非零errorlevel值。2.在.BAT文件中,ECHO和PAUSE命令不会修改errorlevel。3.当比较errorlevel值时,仅当值可能包含空格或其他特殊字符时,才需要分隔符。嘿,Marc,4中的技术很好地解释了setlocal EnableDelayedExpansion。尤其是与。谢谢花了一些时间在这个for循环上,不知道发生了什么。这正好纠正了我的错误。谢谢你的帮助,Aacini。花了一些时间在这个for循环上,但不知道发生了什么。这正好纠正了我的错误。谢谢你的帮助,亚奇尼。