批处理脚本:用于在我的本地目录而不是远程目录上循环

时间:2016-09-28 10:35:18

标签: batch-file for-loop batch-processing

我正在编写一些批处理代码并且我正在解决问题。 我从那以后开始工作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

1 个答案:

答案 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