【问题标题】:I would like to store user input to be used in future updates我想存储用户输入以用于将来的更新
【发布时间】:2016-11-18 20:06:48
【问题描述】:

我已经创建了一个批处理文件,用于将 FTP 文件上传到我们的系统并恢复到特定的库中。这很好用,但它需要我想减少的用户输入。如果我可以存储或检索答案,它将缓解这个问题。有没有办法做到这一点以及如何做到这一点?

fileup.bat

@echo off

SET /P name= Please enter in user name:
SET /P userpw= Please enter in user password:
SET /P IPaddr= Please enter in IP address of the AS400:
SET /P TRQ= Please enter in TRQ number:

echo user>> ftpcmd.dat
echo %name%>> ftpcmd.dat
echo %userpw%>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo lcd c:\ahc>> ftpcmd.dat
echo cd /qsys.lib/ahcpgm.lib>> ftpcmd.dat
echo put PCDIS%TRQ%.savf>> ftpcmd.dat
echo quote rcmd RSTLIB SAVLIB(PCDIS%TRQ%) DEV(*SAVF) SAVF(AHCPGM/PCDIS%TRQ%)>> ftpcmd.dat
echo quote rcmd RSTLIB SAVLIB(PCDIS%TRQ%) DEV(*SAVF) SAVF(AHCPGM/PCDIS%TRQ%) MBROPT(*ALL) ALWOBJDIF(*ALL) RTSLIB(AHCPGM)>> ftpcmd.dat
echo quit>> ftpcmd.dat

ftp -n -s:ftpcmd.dat %IPaddr%


del ftpcmd.dat

【问题讨论】:

  • 那你为什么不在批处理文件中硬编码呢?
  • 或者只是不删除 ftpcmd.dat

标签: batch-file ftp


【解决方案1】:
@echo off

if "%~1"=="" goto auto
del ftpcmd.dat 2>nul

SET /P name= Please enter in user name:
SET /P userpw= Please enter in user password:
SET /P IPaddr= Please enter in IP address of the AS400:
SET /P TRQ= Please enter in TRQ number:

echo user>> ftpcmd.dat
echo %name%>> ftpcmd.dat
echo %userpw%>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo lcd c:\ahc>> ftpcmd.dat
echo cd /qsys.lib/ahcpgm.lib>> ftpcmd.dat
echo put PCDIS%TRQ%.savf>> ftpcmd.dat
echo quote rcmd RSTLIB SAVLIB(PCDIS%TRQ%) DEV(*SAVF) SAVF(AHCPGM/PCDIS%TRQ%)>> ftpcmd.dat
echo quote rcmd RSTLIB SAVLIB(PCDIS%TRQ%) DEV(*SAVF) SAVF(AHCPGM/PCDIS%TRQ%) MBROPT(*ALL) ALWOBJDIF(*ALL) RTSLIB(AHCPGM)>> ftpcmd.dat
echo quit>> ftpcmd.dat

:auto    
ftp -n -s:ftpcmd.dat %IPaddr%

只需运行fileup 将转到标签:auto,因为第一个参数为空。将使用之前的ftpcmd.dat

运行fileup x(其中x 几乎可以是任何东西 - 它的值实际上并未被使用)将跳过goto,删除ftpcmd.dat 并像您当前的系统一样运行。

关键是不要删除文件ftpcmd.dat

另一种方法是使用

if exist ftpcmd.dat goto auto

如果您手动删除ftpcmd.dat,则需要当前数据输入,否则代码将跳至:auto,并使用ftpcmd.dat 中保留的先前值。

【讨论】:

    【解决方案2】:

    一旦第一次输入了适当的值,这种方法就不需要用户在后续运行中输入。
    正如 SomethingDark 所建议的,您可以保留已写入答案的 ftpcmd.dat 副本。
    您也可以将 IP 地址放入 ft​​pcmd.dat,而不是在命令中将其提供给 ftp线。
    运行此脚本时,仅在不存在 ftpcmd.dat 时创建它。否则,只需使用上次存储答案的副本即可。
    在下面的示例中,我还对其进行了一些重新排列,将回声放在重定向之后,我发现它更易于阅读,并且我将“echo”替换为“echo”。出于神秘的原因,您可以在此处查看 SO。

    @echo off
    if EXIST ftpcmd.dat goto :justRunIt
    
    SET /P name= Please enter in user name:
    SET /P userpw= Please enter in user password:
    SET /P IPaddr= Please enter in IP address of the AS400:
    SET /P TRQ= Please enter in TRQ number:
    
     >ftpcmd.dat echo.open %IPaddr%
    >>ftpcmd.dat echo.user
    >>ftpcmd.dat echo.%name%
    >>ftpcmd.dat echo.%userpw%
    >>ftpcmd.dat echo.bin
    >>ftpcmd.dat echo.lcd c:\ahc
    >>ftpcmd.dat echo.cd /qsys.lib/ahcpgm.lib
    >>ftpcmd.dat echo.put PCDIS%TRQ%.savf
    >>ftpcmd.dat echo.quote rcmd RSTLIB SAVLIB(PCDIS%TRQ%) DEV(*SAVF) SAVF(AHCPGM/PCDIS%TRQ%)
    >>ftpcmd.dat echo.quote rcmd RSTLIB SAVLIB(PCDIS%TRQ%) DEV(*SAVF) SAVF(AHCPGM/PCDIS%TRQ%) MBROPT(*ALL) ALWOBJDIF(*ALL) RTSLIB(AHCPGM)
    >>ftpcmd.dat echo.quit
    
    :justRunIt
    ftp -n -s:ftpcmd.dat
    

    如果你真的想走火入魔,你可以检查ftp 命令的ERRORLEVEL 看看它是否成功,并假设如果失败是由于用户输入错误。如果看起来(例如)输入了错误的用户名,您可以删除 ftpcmd.dat,以便在下次运行时提示用户输入。

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2021-09-20
      • 2013-10-11
      相关资源
      最近更新 更多