美好的一天。 我已经完成了一个连接到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
答案 0 :(得分:3)
您可以提前使用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
模式应该打开,我假设{{1} }命令会提示用户......
纠正更新:“交互模式”意味着ftp
和mget
将要求用户确认每个匹配文件的传输,无论是否存在。见technet.microsoft.com/en-us/library/bb490670.aspx。 mput
中没有覆盖确认。 [Martin Prikryl]
答案 1 :(得分:2)
如果传输之前已存在本地文件,请使用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,而不是在批处理文件中进行黑客攻击。