我试图编写一个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"
上面显示的数据文件夹包含运行该程序所需的数百个文件夹。我希望能够在一个大批量脚本中执行此操作。
答案 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%可能会很愉快地工作。