2010-07-29 162 views
0

C你可以使用%username%作爲variable當前用戶的名稱,目錄列表和這樣的:c:\documents and settings\%username%\變量在批處理FTP腳本

有這樣的一個批處理腳本? 只使用%username%似乎沒有幫助。

我寫了一個腳本訪問我的FTP服務器,所以我可以加載文件到服務器。 我希望我的朋友能夠使用此腳本,但我不想編寫幾個不同的腳本。 這是我到目前爲止有:

@echo off 
@ftp -s:"%~f0" &GOTO: EOF 
open FTP.server.com 
user 
pass 
cd /home/ftp 
bin 
lcd "c:\documents and settings\%username%\my documents\FTP" 
mput *txt 
pause 
bye 

有一定有辦法

回答

0

而不是使用lcd,一個更好的想法可能會改變工作目錄外的批處理文件。

@echo off 

@pushd "c:\documents and settings\%username%\my documents\FTP" 

@ftp -s:"%~f0" &GOTO: EOF 

open FTP.server.com 
user 
pass 
cd /home/ftp 
bin 
mput *txt 

@pause 

該解決方案唯一的問題是,腳本本身不再是在工作目錄,所以你需要添加一個路徑爲。 (或者,把它放在FTP文件夾中;)

此外,輕微的瑣事,但這實際上並不是找到我的文檔的正確方法。特別是在Vista或Windows 7上,用戶配置文件存儲在C:\Users中。並且,用戶可以移動我的文檔(在我的計算機上,我的文檔位於D:\Mike's Documents

但是,似乎沒有環境變量直接指向我的文檔,因此您必須將就着用:

"%userprofile%\my documents\FTP" 

如果運行此腳本的人都跑XP並沒有把他們的我的文檔,那麼這其實並不重要。

+0

是我們所有的XP用戶,就目前而言,試圖將它們轉換爲* nix中。 任何方式%userprofile%的作品,但它只能工作一次。 當我再次運行我的腳本它不起作用cmd屏幕只是閃爍。和 什麼也沒有發生.. :( – acidblue 2010-07-29 06:25:47

0

我相信我找到了一個更好的方法,儘管它有更多的代碼。

set "rootdir=%userprofile%\my documents"

set "destdir=c:\
for /f "delims=" %%a in ('dir /b /s "%rootdir%*.txt"') do copy "%%~a" "%destdir%"

然後通常的FTP的東西,包括lcd c:\

伊夫測試這和它的作品,但我想找到一個更簡單的方法。 我嘗試過使用xcopy,但由於某些原因,它無法在我的系統上運行,cmd屏幕只是掛起。 也試過只使用copy,但那給了我「無法找到文件」的錯誤。

+0

該解決方案的問題是,它留下了一堆散落在驅動器根目錄中的文件。你應該嘗試在已經打開的控制檯中運行我的腳本,這樣你就可以看到錯誤是。 – 2010-07-29 16:20:30

1

如果您更改批處理文件,以便每次運行批處理文件時創建腳本文件,都可以完成此操作。您可以通過使用echo命令將腳本行寫入腳本文件來完成此操作,然後您可以將其傳遞給ftp命令。這部作品的原因是echo將擴大%的用戶名%變量將其寫入腳本文件之前:

@echo off 
del script.txt 
echo open FTP.server.com>>script.txt 
. 
[echo rest of script lines to file] 
. 
echo lcd "c:\documents and settings\%username%\my documents\FTP">>script.txt 
echo echo mput *txt>>script.txt 

@ftp -s:script.txt