2013-07-10 35 views
0

創建批處理文件以處理FTP命令時,如何在ftp/batch與管道有問題時輸入用戶名。用戶名|管道在windows下失敗FTP命令行批處理

注:在主機和用戶名的點/週期是intential。

REM Connection information: 
SET Server=my.server.com 
SET UserName=my.server.com|my.username 
SET Password=password 


IF NOT EXIST "%TEMP%\FTPCommands" MD "%TEMP%\FTPCommands" 
SET Commands="%TEMP%\FTPCommands\SendToFTP_commands.txt" 


rem -- add username and password to commands file 
ECHO %UserName%> %Commands% 
ECHO %Password%>> %Commands% 

FTP -d -i -s:%Commands% %Server% 

錯誤

「 'my.username' 不被識別爲一個內部或外部的命令,可操作的程序或批處理文件。」

+0

嘗試將其置於某種形式的引號中。這通常可以解決我的大部分問題。 –

回答

1

把雙引號之間的變量定義和逃生管道與^

set "UserName=my.server.com^|my.username" 

沒有你需要躲避管兩次雙引號:一次定義時,一次回顯變量時:

set UserName=my.server.com^^^|my.username" 

^^被轉義^^|是逃脫|,讓你呼應變量時還有一個逃脫管。

+0

感謝Ansgar,圍繞變量定義的雙引號完美工作! – Jacques

0

您可以使用^ |逃避|符號。

更新來修正轉義字符由ANSGAR 指出該做什麼對待|作爲管道符號,並嘗試將一個命令的輸出作爲另一個命令的輸入。因此你的錯誤。由於管道符號存在,因此批處理文件解釋程序希望my.server.com成爲一個程序,您正在嘗試將其輸出管道輸送到my.username。

+0

驅動器downvote?謹慎闡述? –

+0

反斜槓不是批量中的轉義字符。這不是bash。 –

+0

我的不好,應該是^。 –

2

試試這個:

@echo off &setlocal 
SET "UserName=my.server.com|my.username" 
SETLOCAL ENABLEDELAYEDEXPANSION 
> "%Commands%" ECHO(!UserName! 
endlocal