2014-11-07 89 views
0

我想写一个Windows批处理脚本,通过一堆文件夹来运行2个程序。我不是shell脚本专家,但我尽我所能。在子文件夹中运行程序

这里就是我想通过每个文件夹运行...

输入的程序1是一个.extension1文件然后产生,然后通过程序2运行产生什么,我需要一个.extension2文件。

在我运行该脚本之前,我进入了该文件夹。程序被复制到文件夹,因为它们只在当前工作目录中工作。

copy C:\program1 . 
copy C:\program2 . 
for %i in (*.extension1) do program1 "%i"  
for %i in (*.extension2) do program2 "%i" 

上面显示的数据文件夹中包含了数百个,我需要在运行该程序的文件夹。我希望能够做到这一点在一个大的批处理脚本。

回答

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir\one" 
PUSHD "%sourcedir%" 
FOR /r %%a IN (*.ext1) DO (
PUSHD "%%~dpa" 
ECHO(c:\program1 "%%~nxa" 
popd 
) 
popd 
GOTO :EOF 

您需要更改sourcedir的设置以适合您的情况。

在所有可能的情况下,这就是所有你需要的 - 或者至少,这是一个框架。

请注意,该例程将简单地ECHO所需的命令。这允许无害的测试(在代表性的子树上)确保该过程应该在整个树上工作。

更改ECHO(c:\program1c:\program1每个.ext1文件中的子树应该执行的第一个程序。程序检查文件是否与可执行文件存在于同一个目录中是不寻常的 - 如果它不会取得路径,那么将假定“当前目录”。

您不会说程序program1是否从whatever.ext1生成名为whatever.ext2的文件,或者它是否生成somethingradicallydifferent.ext2。很可能,将使用相同的名称。

如果是这样的情况,则运行所述第二程序,只需添加后

ECHO(c:\program1 "%%~nxa" 


ECHO(c:\program2 "%%~na.ext2" 

否则,简单地重复整个块,改变ext1ext2

(我假设你可以弄清楚我已经缩写了扩展名)

如果,离机会程序(一个或多个)必须在同一目录下,然后用

echo n|C:\program1 . >nul 2>nul 
ECHO(program1 "%%~nxa" 

更换

ECHO(c:\program1 "%%~nxa" 

(和同上的方案2,很明显)。这里的necho编入copy,这样copy只会发生一次。这可能会有所改进,但从99年开始,它可能只是理论上的要求。9999%可能执行c:\program?会很愉快地工作。

相关问题