【问题标题】:batch script to download a file via ftp, how can I handle the overwrite批处理脚本通过 ftp 下载文件,我该如何处理覆盖
【发布时间】:2016-11-23 15:06:00
【问题描述】:

大家好。 我已经完成了一个连接到 FTP 并在 .bat 文件的同一位置下载文件的批处理脚本。一切正常,现在,有没有办法“请求文件覆盖权限”?我的意思是,如果用户已经有一个以相同方式命名的文件,是否可以防止覆盖并询问他该怎么做?代码实际上是:

@echo off
echo user MYUSERNAME> ftpcmd.dat
echo MYPASSWORD>> ftpcmd.dat
echo bin>> ftpcmd.dat
echo cd /www.website.com/>>ftpcmd.dat
echo get afile.txt>> ftpcmd.dat
echo quit>> ftpcmd.dat
ftp -n -s:ftpcmd.dat ftp.website.com
del ftpcmd.dat

【问题讨论】:

  • ftp 命令行之前的批处理脚本中使用if exist "afile.txt"?那么您可以使用choice...有条件地提示用户选择是或否来覆盖...
  • 哦,那很好,我会对此进行更多研究,谢谢。

标签: windows batch-file ftp


【解决方案1】:

使用if exist command测试,本地文件在传输前是否已经存在。

如果存在,ask an user for confirmation

@echo off

if not exist afile.txt goto download

:ask
echo Overwrite?
set INPUT=
set /P INPUT=Y/N: %=%
If /I "%INPUT%"=="Y" goto download
If /I "%INPUT%"=="N" exit
echo Incorrect input
goto ask

:download
...
ftp -n -s:ftpcmd.dat ftp.website.com

虽然对于长期解决方案,您最好使用 PowerShell,而不是在批处理文件中破解它。

【讨论】:

    【解决方案2】:

    你可以提前使用if exist "afile.txt",使用choice让用户决定做什么:

    @echo off
    if exist "afile.txt" (
        choice /C YN /M "Overwrite 'afile.txt'? "
    ) else (
        > nul ver & rem (clear `Errorlevel`)
    )
    if not ErrorLevel 2 (
        > "ftpcmd.dat" (
            echo user MYUSERNAME
            echo MYPASSWORD
            echo bin
            echo cd /www.website.com/
            echo get afile.txt
            echo quit
        )
        ftp -n -s:ftpcmd.dat ftp.website.com
        del "ftpcmd.dat"
    )
    

    但是,由于ftp 命令行中没有-i 开关,并且交互式prompt 模式应该默认开启,我假设ftp 命令无论如何都会提示用户。 ..
    更正更新:“交互模式”意味着mgetmput 将要求用户确认每个匹配文件的传输,无论它是否存在。见technet.microsoft.com/en-us/library/bb490670.aspxftp.exe 中没有覆盖确认。 [Martin Prikryl]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      相关资源
      最近更新 更多