标题: [其他] [已解决]求助:批处理sftp下载文件到本地指定目录 [打印本页]
作者: hbxlt 时间: 2018-6-1 08:27 标题: [已解决]求助:批处理sftp下载文件到本地指定目录
本帖最后由 hbxlt 于 2018-6-5 15:01 编辑
请教各位老师,如何利用批处理sftp下载远程linux服务器的文件到本地指定目录,如D:\data\sftp
谢谢- @echo off
- echo 欢迎使用sftp 自动下载工具
- psftp 202.101.248.29 -l root -pw root111 <qg.txt
- echo cd hb/kpi/qg > qg.txt
- echo bye >>qg.txt
复制代码
作者: Batcher 时间: 2018-6-1 12:53
- @echo off
- pushd "D:\data\sftp\"
- > qg.txt echo cd /root/hb/kpi/qg
- >> qg.txt echo mget *
- >> qg.txt echo bye
- echo y | psftp 202.101.248.29 -l root -pw root111 -b qg.txt
复制代码
作者: hbxlt 时间: 2018-6-1 15:33
本帖最后由 hbxlt 于 2018-6-1 15:42 编辑
回复 2# Batcher
不知道为什么,使用您给的代码,还是不行。
下面是我原先的代码,能下载包含当前日期的数据文件,但是只能默认下载到当前目录,实际是需要换个目录。
@echo off
echo 欢迎使用ftp 自动下载工具
for /f %%i in ('realdate.com /d') do (set remotelogname=%%i)
echo cd hb/kpi/qg > qg.txt
echo mget *%remotelogname%* >> qg.txt
echo bye >> qg.txt
echo --------------------------------------- >>qg.log
for /f %%i in ('realdate.com /f="CCYY-MM-DD"') do (set locallogdate=%%i)
for /f %%i in ('realdate.com /f="hh:mm:ss"') do (set locallogtime=%%i)
echo %locallogdate% %locallogtime% >> qg.log
psftp 202.101.248.29 -l root -pw root111 < qg.txt > qg.log
echo. >> qg.log
echo done. >> qg.log
作者: Batcher 时间: 2018-6-1 22:07
回复 3# hbxlt
pushd 命令你放到哪里了?
作者: hbxlt 时间: 2018-6-4 08:28
回复 4# Batcher
老师,我按照你的语句执行,没有效果。
如果用我的语句,pushd命令应该放到哪个位置呢?
作者: Batcher 时间: 2018-6-4 09:05
回复 5# hbxlt
psftp 上面一行
作者: hbxlt 时间: 2018-6-4 09:28
回复 6# Batcher
老师,按照你的提示,我将PSHD命令放在PSFTP前面一行,结果是 在新目录下有qg.log,没有下载任何文件。
作者: Batcher 时间: 2018-6-4 09:41
回复 7# hbxlt
放在第2行(也就是@echo off下面)试试
作者: hbxlt 时间: 2018-6-4 09:56
回复 8# Batcher
还是不行
作者: Batcher 时间: 2018-6-4 10:04
回复 9# hbxlt
有报错信息吗?你的 psftp 放在哪个目录下?
作者: hbxlt 时间: 2018-6-4 10:34
回复 10# Batcher
putty 文件放在D:\data\sftp\
默认下载的路径也是D:\data\sftp\
想把下载的文件放到D:\data\sftp\ee下
错误提示一闪而过,好像说是pusdh的不是内部命令。
作者: Batcher 时间: 2018-6-4 11:30
回复 11# hbxlt
是不是抄错单词了 pushd
作者: hbxlt 时间: 2018-6-4 11:47
回复 12# Batcher
在批处理命令里没有写错,是我刚才回复帖子的时候写错的。
作者: Batcher 时间: 2018-6-4 12:46
回复 13# hbxlt
echo 欢迎使用ftp 自动下载工具
for /f %%i in ('realdate.com /d') do (set remotelogname=%%i)
echo cd hb/kpi/qg > qg.txt
echo mget *%remotelogname%* >> qg.txt
echo bye >> qg.txt
echo --------------------------------------- >>qg.log
for /f %%i in ('realdate.com /f="CCYY-MM-DD"') do (set locallogdate=%%i)
for /f %%i in ('realdate.com /f="hh:mm:ss"') do (set locallogtime=%%i)
echo %locallogdate% %locallogtime% >> qg.log
pushd "D:\data\sftp\ee"
psftp 202.101.248.29 -l root -pw root111 < qg.txt
popd
echo. >> qg.log
echo done. >> qg.log
这段代码保存为 D:\data\sftp\test.bat
打开一个CMD窗口,执行 D:\data\sftp\test.bat
结果发出来看看
作者: hbxlt 时间: 2018-6-4 15:18
回复 14# Batcher
Microsoft Windows [???? 6.1.7601]
???????? (c) 2009 Microsoft Corporation????????????????
C:\Users\niu>d:
D:\>cd data\sftp
D:\data\sftp>test11.bat
D:\data\sftp>echo ????????ftp ????????????
????????ftp ????????????
D:\data\sftp>for /F %i in ('realdate.com /d') do (set remotelogname=%i )
D:\data\sftp>(set remotelogname=20180604 )
D:\data\sftp>echo cd hb/kpi/qg 1>qg.txt
D:\data\sftp>echo mget *20180604* 1>>qg.txt
D:\data\sftp>echo bye 1>>qg.txt
D:\data\sftp>echo --------------------------------------- 1>>qg.log
D:\data\sftp>for /F %i in ('realdate.com /f "CCYY-MM-DD"') do (set locallogdate=
%i )
D:\data\sftp>(set locallogdate=2018-06-04 )
D:\data\sftp>for /F %i in ('realdate.com /f "hh:mm:ss"') do (set locallogtime=%i
)
D:\data\sftp>(set locallogtime=15:14:53 )
D:\data\sftp>echo 2018-06-04 15:14:53 1>>qg.log
D:\data\sftp>pushd "D:\data\sftp\ee"
D:\data\sftp\ee>psftp 202.101.248.29 -l root -pw root111 0<qg.txt
系统找不到指定的文件。
D:\data\sftp\ee>popd
D:\data\sftp>echo. 1>>qg.log
D:\data\sftp>echo done. 1>>qg.log
D:\data\sftp>
作者: Batcher 时间: 2018-6-4 15:37
回复 15# hbxlt
再试试这样:
echo 欢迎使用ftp 自动下载工具
for /f %%i in ('realdate.com /d') do (set remotelogname=%%i)
echo cd hb/kpi/qg > qg.txt
echo mget *%remotelogname%* >> qg.txt
echo bye >> qg.txt
echo --------------------------------------- >>qg.log
for /f %%i in ('realdate.com /f="CCYY-MM-DD"') do (set locallogdate=%%i)
for /f %%i in ('realdate.com /f="hh:mm:ss"') do (set locallogtime=%%i)
echo %locallogdate% %locallogtime% >> qg.log
pushd "D:\data\sftp\ee"
psftp 202.101.248.29 -l root -pw root111 < %~dp0qg.txt
popd
echo. >> qg.log
echo done. >> qg.log
作者: hbxlt 时间: 2018-6-4 16:44
本帖最后由 hbxlt 于 2018-6-4 16:46 编辑
Microsoft Windows [???? 6.1.7601]
???????? (c) 2009 Microsoft Corporation????????????????
C:\Users\niu>d:
D:\>cd data\sftp
D:\data\sftp>test11.bat
D:\data\sftp>echo ????????ftp ????????????
????????ftp ????????????
D:\data\sftp>for /F %i in ('realdate.com /d') do (set remotelogname=%i )
D:\data\sftp>(set remotelogname=20180604 )
D:\data\sftp>echo cd hb/kpi/qg 1>qg.txt
D:\data\sftp>echo mget *20180604* 1>>qg.txt
D:\data\sftp>echo bye 1>>qg.txt
D:\data\sftp>echo --------------------------------------- 1>>qg.log
D:\data\sftp>for /F %i in ('realdate.com /f "CCYY-MM-DD"') do (set locallogdate=
%i )
D:\data\sftp>(set locallogdate=2018-06-04 )
D:\data\sftp>for /F %i in ('realdate.com /f "hh:mm:ss"') do (set locallogtime=%i
)
D:\data\sftp>(set locallogtime=16:40:48 )
D:\data\sftp>echo 2018-06-04 16:40:48 1>>qg.log
D:\data\sftp>pushd "D:\data\sftp\ee"
D:\data\sftp\ee>psftp 202.101.248.29 -l root -pw root111 0<D:\data\sftp\qg.txt
'psftp' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
D:\data\sftp\ee>popd
D:\data\sftp>echo. 1>>qg.log
D:\data\sftp>echo done. 1>>qg.log
如果我将putty文件拷贝到D:\data\sftp\ee,就能正常执行。如果不拷贝的话,有没有办法执行?
作者: Batcher 时间: 2018-6-4 16:53
回复 17# hbxlt
echo 欢迎使用ftp 自动下载工具
for /f %%i in ('realdate.com /d') do (set remotelogname=%%i)
echo cd hb/kpi/qg > qg.txt
echo mget *%remotelogname%* >> qg.txt
echo bye >> qg.txt
echo --------------------------------------- >>qg.log
for /f %%i in ('realdate.com /f="CCYY-MM-DD"') do (set locallogdate=%%i)
for /f %%i in ('realdate.com /f="hh:mm:ss"') do (set locallogtime=%%i)
echo %locallogdate% %locallogtime% >> qg.log
pushd "D:\data\sftp\ee"
%~dp0psftp 202.101.248.29 -l root -pw root111 < %~dp0qg.txt
popd
echo. >> qg.log
echo done. >> qg.log
作者: hbxlt 时间: 2018-6-4 17:18
回复 18# Batcher
谢谢老师,已正常实现功能。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |