2011-04-12 76 views
10

现在我有一个批处理作业,我写了一个调用另一个文件并传入可执行文件需要运行的变量(密码和文件名)的批处理作业。批处理目录中的所有文件

例:

> cd f:\test\utils 
> admin import-xml -Dimport.file=f:\DB\file1.xml -Dadmin.db.password=test123 

我写了一份工作,做到这一点,但发现,会有多个文件。

用户名和密码永远不会改变,但文件名不同,像15个不同的XML文件 - 也许更快即将来临。

这些文件将始终位于相同的文件夹中。我可以写一些将处理位于此目录中的每个文件的东西,而不是像15-20个作业(每个文件一个)。等待下一个完成之前,或者我可以添加一个3分钟的睡眠,然后开始下一个文件。

回答

30
pushd C:\test\utils 
for %%F in (F:\DB\*.xml) do (
    admin import-xml "-Dimport.file=%%~dpnxF" -Dadmin.db.password=test123 
) 
popd 

%%~dpnxF扩展为d RIVE,p ATH,基部Ñ AME和e当前文件的X张力。

如果您打算设置在环路使用环境变量(%foo%),阅读help set你遇到麻烦之前,首先。

+0

太棒了。能够用它来实现我所需要的。谢谢。 – Gabriel 2011-04-14 18:37:26

+0

你能否解释一下如何避免在'for'循环中使用'set'的麻烦? – Snekse 2012-06-25 02:42:41

+0

Snekse,魔法字有*延迟变量扩展*。这是我必须在每一个我给出的第二批文件答案中解释的东西。它也很好地在'help set'中解释过。 – Joey 2012-06-25 05:31:45

0
for file in f:\DB\* 
do 
    admin import-xml -Dimport.file="$file" -Dadmin.db.password=test123 
done 
+0

不适用于Windows批处理! – kokbira 2014-03-17 20:14:30

7

您可以使用for命令。像这样的事情在一个批处理文件:

for %%f in (*.xml) do call myotherbatch.bat %%f 

假设你正在运行的admin命令不返回,直到作业完成,上述循环将依次处理它们。

如果在提示符下(而不是在批处理文件中)运行该命令,则只能使用一个%。

相关问题