我正在编写一些批处理代码并且我正在解决问题。 我从那以后开始工作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);
之后,我认为最简单的方法是复制我想在临时目录中传输的文件并在其上运行我的脚本。
这是我的替代代码:
@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 :(得分:0)
尝试将CD
更改为CD /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