【问题标题】:How to do multiple commands inside a forfiles batch script如何在 forfiles 批处理脚本中执行多个命令
【发布时间】:2017-03-09 10:21:58
【问题描述】:

我们想要创建一个批处理脚本,为我们的每个 .xml 文件运行一个命令。该命令应针对不以 _m 结尾的每个文件运行。我们尝试使用 forfiles 遍历每个文件,但我们不知道如何将 do 与它一起使用。

这是我们当前不工作的脚本,我们尝试遍历每个文件。识别文件名,如果它以 _m 结尾,则将其子串以不运行命令。

forfiles /p /source /m *.xml do (

set "filename=@fname"
set "extension=_m.xml"
set "extended=%filename%extension"


IF NOT %filename:~-2%=="_m"(
    ssoadm import-entity --cot something--realm something--spec saml2 -m @file -x %extended --adminid something--password-file password --debug
)

感谢您的帮助!

【问题讨论】:

  • 只需使用内置的for 命令而不是外部的forfiles 命令,就可以使用do

标签: windows batch-file for-loop


【解决方案1】:
for /f "delims=" %%a in (
 'dir /b /a-d *.xml^|findstr /v /e /i /L "_m.xml" '
) do (
   ssoadm import-entity --cot something--realm something--spec saml2 -m "%%a" -x %extended --adminid something--password-file password --debug
)

对于dir 中的每个条目,/b 基本形式(仅限名称)/a-d,不带目录名称;查找 /v/e 结束 /i 不区分大小写 /L 字面意思是“-m.xml”的名称,将找到的完整名称分配给 %%a

不知道ssoadm 做了什么,但是

%%~na 将产生文件的基本名称,%%~xa 将产生扩展名。

您的代码可能有效,但您需要调用 delayed expansion(搜索 SO)并修改代码以适应延迟扩展方法(如在 SO 上多次记录的那样)


for /f "delims=" %%a in (
 'dir /b /a-d *.xml^|findstr /v /e /i /L "_m.xml" '
) do (
   echo(%%~na
   echo(%%~xa
   echo(%%~nxa
   echo(%%a
   echo(%%a %%~na_M%%~xa
)

...随意选择零件/常数,然后将它们以 meccano 风格组合在一起。

【讨论】:

  • 感谢您的帮助。我还是不太明白我想要的样子。假设我有四个文件:file1.xml、file1_m.xml、file2.xml 和 file2_m.xml,我需要在每个命令中使用这些对。我怎么做?这是我要运行的命令:somecommand -x file1.xml -m file1_m.xmlsomecommand -x file2.xml -m file2_m.xml
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 2012-09-19
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多