2016-09-28 48 views
1

我正在編寫一些批處理代碼,並且出現問題。 我正在爲此工作2天,我不明白爲什麼我的循環'For'這樣做。批處理腳本:用於在本地目錄而不是我的遠程目錄上循環

批處理文件是推出的C#程序與3個ARGS

這裏是我的代碼:

set lastname=%1 
set firstname=%2 
set init=%3 
echo open my_remote_add>info.ftp 
echo user>>info.ftp 
echo pwd>>info.ftp 
echo cd "dir/subdir/subsubdir/subsubsubdir" >> info.ftp 
echo lcd C:\DIR\SUBDIR>>info.ftp 
echo prompt>>info.ftp 
echo mput *.e*>>info.ftp 
set directory=dir 
echo %directory%>>info.ftp 
::##My probleme is here ## 
for /f %%f in ('%directory% /b *.e*') do echo %%f>>info.ftp 
::## %directory% show my remote dir, but echo %%f show locals files name with extension .e* instead of remotes directory files name## 
echo bye >> info.ftp 
ftp -s:info.ftp 
pause` 

我不知道爲什麼它的循環在我的本地目錄,而不是我的遠程目錄。 如果有人有一些想法? 謝謝。 問候, 大衛

編輯::問題解決

嗨。

我完全重建了我的想法。 問題是:dir是我在C#exe上設置的WorkingDirectory。

var proc = new ProcessStartInfo(); 
proc.FileName = @"C:\DIR\SUBDIR\SUBSUBDIR\exportFTP.bat"; 
proc.WorkingDirectory = @"C:\DIR\SUBDIR"; 
proc.Arguments = String.Format("{0} {1} {2}", str2, str3, str4); 
Process.Start(proc); 

在那之後,我認爲這是最簡單的複製,我想在一個臨時目錄transfert並在其上運行我的腳本文件。

這是我替代碼:再次

@echo off 
set lastname=%1 
set firstname=%2 
set init=%3 
set RemotePath=remotedir/remotesubdir/remotesubdir/remotesubdir 
mkdir temp 
set LocalPath=C:\DIR\SUBDIR\temp 
for /f %%f in ('dir /b *.e0*') do copy %%f temp\%lastname%_%firstname%_%init%_%%f>>info.ftp 
echo open remote_adress>info.ftp 
echo user>>info.ftp 
echo pwd>>info.ftp 
echo lcd %LocalPath%>>info.ftp 
echo cd %RemotePath% /d>>info.ftp 
echo prompt>>info.ftp 
echo mput *.e0*>>info.ftp 
echo bye >> info.ftp 
ftp -s:info.ftp 
del info.ftp 
rmdir /s /q temp 
move /y "C:\DIR\SUBDIR\*.e0*" "C:\DIR\SUBDIR\SUBDIR\" 

感謝@Compo

+0

相反的,包括你的問題解決方案,我強烈建議您將其作爲答案發布。 – aschipfl

回答

0

剛剛嘗試改變CDCD /D

@Echo Off 

set lastname=%1 
set firstname=%2 
set init=%3 

set directory=dir 

>info.ftp (
    echo open my_remote_add 
    echo user 
    echo pwd 
    echo cd /d "dir/subdir/subsubdir/subsubsubdir" 
    echo lcd C:\DIR\SUBDIR 
    echo prompt 
    echo mput *.e* 
    echo %directory% 
    echo for /f "delims=" %%f in ('%directory% /b *.e*') do echo %%f 
    echo bye) 

ftp -s:info.ftp 

pause 
Timeout -1 
+0

嗨。感謝您的回覆。我試過你的想法,但我得到這個錯誤:550/D:沒有這樣的文件或目錄。這個選項的目標是什麼? (/ d) – David

+0

經過一番嘗試,cd/d的工作方式如下:cd「dir/subdir/......」/ d。 (/ d =更改驅動器;)感謝您的選擇)但它不是在最後的工作,我仍然循環在本地目錄。 – David

相關問題