在子文件夹中运行程序

时间:2014-11-07 00:15:06

标签: windows batch-file cmd

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

这是我试图浏览每个文件夹的内容......

program1的输入是.extension1文件,然后生成.extension2文件,然后通过program2运行以生成我需要的文件。

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

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

上面显示的数据文件夹包含运行该程序所需的数百个文件夹。我希望能够在一个大批量脚本中执行此操作。

1 个答案:

答案 0 :(得分: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:\program1更改为c:\program1 应该执行子树中每个.ext1文件的第一个程序。程序检查文件是否与可执行文件存在于同一目录中是不常见的 - 如果它不会采取路径,那么"当前目录"将被假设。

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

如果是这种情况,那么要运行第二个程序,只需在

之后添加
 ECHO(c:\program1 "%%~nxa"


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

否则,只需重复整个广告块,将ext1更改为ext2

即可

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

如果程序有可能在同一目录中,则替换

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

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

(显然,对于程序2也是如此)。 n echo copy加入了copy,因此c:\program?只会发生一次。这可以改进,但可能只是理论上的要求,因为执行{{1}}的99.9999%可能会很愉快地工作。