2016-02-23 46 views
1

我需要通過FTP將某個文件(不是全部)從文件夾上傳到遠程服務器。批處理文件 - 使用通配符匹配多個FTP上傳

我編碼以下執行通配符匹配,但我想我錯過了一些東西到FTP生成的文件。

備註:問題不在於上傳文件夾(這相對簡單),而是從給定文件夾中排除一些條目並上傳所有其他文件。

我成功地排除了這些文件並保留了其餘部分,但是我無法找到上傳後者的方式。

特別是,mput cmd似乎不適用於輸入文件名。爲什麼?

我想關注這個問題:我如何提供FTP cmds以從上述過濾上傳每個結果文件?

echo off 
setlocal enabledelayedexpansion 
FOR /R localfolder %%F IN (*.*) DO (
    set fname=%%~nF 
    set ext=%%~xF 
    set filename=!fname!!ext! 
    set subfname=!fname:~0,4! 
    IF NOT "!subfname!" == "idat" (
     echo ftp 
     echo open ftp.something.it 
     echo ftpuser 
     echo ftppass 
     echo lcd localfolder 
     echo cd remotefolder 
     echo binary 
     echo mput !filename! 
     echo disconnect 
     echo bye 
     ) 
    ) 
    pause 
+0

[批處理文件整個文件夾上傳到FTP](可能的重複http://stackoverflow.com/questions/11643683/batch-file-uploading-entire -folder-to-ftp) –

+0

不包括用'[folder] \ idat *。*'替換'C:\ user \ *'' – SomethingDark

+0

它不相關:實際上'idat'條目是那些被上傳排除的條目 –

回答

0

這是解決方案,我幾乎接近它:只需填寫一個外接一批蝙蝠與FTP命令文件,然後再調用這個文件在每個循環的結束。將其刪除並從列表中的下一個條目開始。對於任何進一步的用法,請小心在>>操作符之前修剪任何空白區域,如下所示。

@echo off 
setlocal enabledelayedexpansion 
FOR /R localfolder %%F IN (*.*) DO (
set fname=%%~nF 
set ext=%%~xF 
set filename=!fname!!ext! 
set subfname=!fname:~0,4! 
IF NOT "!subfname!" == "idat" (
echo open ftp.something.it>> ftp.cmds.bat 
echo username>> ftp.cmds.bat 
echo password>> ftp.cmds.bat 
echo lcd localfolder>> ftp.cmds.bat 
echo cd remotefolder>> ftp.cmds.bat 
echo binary>> ftp.cmds.bat 
echo mput !filename!>> ftp.cmds.bat 
echo disconnect>> ftp.cmds.bat 
echo bye>> ftp.cmds.bat 
ftp -i -s:ftp.cmds.bat 
del ftp.cmds.bat 

) )

0

下一個腳本可能會有幫助。閱讀List of FTP commands for the Microsoft command-line FTP client

@ECHO OFF 
SETLOCAL EnableExtensions EnableDelayedExpansion 
set "localfolder=D:\test\31441809\root" change 
set "lcd-folder=%localfolder%" 
set "excludeFile=nico"     change to `idat` 
set "ftpscript=%temp%\35574454ftp.dat" change 
(
    echo open ftp.something.it 
    echo user ftpuser 
    echo ftppass 
    echo binary 
    echo cd remotefolder 
    echo lcd %lcd-folder% 
    FOR /R %localfolder% %%F IN (*.*) DO (
     set "fname=%%~nF" 
     set "ext=%%~xF" 
     set "filename=!fname!!ext!" 
     set "subfname=!fname:~0,4!" 
     IF /I NOT "!subfname!"=="%excludeFile%" (
     if /I not "!lcd-folder!\"=="%%~dpF" (
      rem change local directory only if necessary 
      set "lcd-folder=%%~dpF" 
      set "lcd-folder=!lcd-folder:~0,-1!"  remove trailing backslash 
      echo lcd !lcd-folder! 
     ) 
     echo put !filename! 
    ) 
) 
    echo disconnect 
    echo bye 
)>"%ftpscript%" 
type "%ftpscript%" 
pause 
ftp -i -n -s:"%ftpscript%" 

輸出示例:

d:\bat> D:\bat\SO\35574454.bat 
open ftp.something.it 
user ftpuser 
ftppass 
binary 
cd remotefolder 
lcd D:\test\31441809\root 
put JohnDoe.txt 
lcd D:\test\31441809\root\Ian-ionescu 
put Ian-ionescuY.txt 
lcd D:\test\31441809\root\John-doe 
put John-doe.txt 
put John-doeA.txt 
lcd D:\test\31441809\root\Nicola-sheperd 
put SheperdNicola.txt 
lcd D:\test\31441809\root\Sara-smith 
put Sara-smith.txt 
put Sara-smithZ.txt 
disconnect 
bye 
Press any key to continue . . . 
ftp> open ftp.something.it 
Connected to www.something.it. 
220 FTP Server ready. 
ftp> user ftpuser 
331 Password required for ftpuser. 
etc.etc. 
+0

謝謝JosefZ爲您提供解決方案。幸運的是,我也成功地找到了它。他們是相似的,因此我很高興,因爲這種方法似乎是唯一的負擔得起的。 –

相關問題