批处理脚本通过ftp下载文件,我该如何处理覆盖

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批处理脚本通过ftp下载文件,我该如何处理覆盖相关的知识,希望对你有一定的参考价值。

美好的一天。我已经完成了一个连接到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
答案

您可以提前使用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"
)

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

另一答案

如果本地文件在传输之前已存在,请使用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,而不是在批处理文件中进行黑客攻击。

以上是关于批处理脚本通过ftp下载文件,我该如何处理覆盖的主要内容,如果未能解决你的问题,请参考以下文章

我该如何处理这个警告:哈希不匹配?

如果连接关闭,我该如何处理连接并重新连接?

Codeigniter:当我插入数据时出现重复键错误,我该如何处理这个错误?

我该如何处理这个 Array 对象? (目标-C)

我该如何处理这个 C++ Multimap 问题?

iOS 14 后列表背景颜色更改并添加了填充,我该如何处理?