Board logo

标题: [其他] [已解决]求助:批处理sftp下载文件到本地指定目录 [打印本页]

作者: hbxlt    时间: 2018-6-1 08:27     标题: [已解决]求助:批处理sftp下载文件到本地指定目录

本帖最后由 hbxlt 于 2018-6-5 15:01 编辑

请教各位老师,如何利用批处理sftp下载远程linux服务器的文件到本地指定目录,如D:\data\sftp
谢谢
  1. @echo off
  2. echo 欢迎使用sftp 自动下载工具   
  3. psftp 202.101.248.29 -l root -pw root111 <qg.txt
  4. echo cd hb/kpi/qg > qg.txt
  5. echo bye >>qg.txt
复制代码

作者: Batcher    时间: 2018-6-1 12:53

  1. @echo off
  2. pushd "D:\data\sftp\"
  3. >  qg.txt echo cd /root/hb/kpi/qg
  4. >> qg.txt echo mget *
  5. >> qg.txt echo bye
  6. 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