如何在forfiles批处理脚本

时间:2017-03-09 10:21:59

标签: windows batch-file for-loop

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

这是我们当前无法运行的脚本,我们尝试遍历每个文件。识别文件名,并将其子串到不运行命令(如果它以 _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
)

感谢您的帮助!

1 个答案:

答案 0 :(得分: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不区分大小写%%a字面意思“-m.xml”的名称,将找到的完整名称指定为ssoadm

不知道%%~na做了什么,但

%%~xa将生成文件的基本名称,并delayed expansion扩展名。

您的代码可能有效,但您需要调用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 ) (搜索SO)并修改代码以适应delayedexpansion方法(在SO上记录很多次)

union all

...随意挑选部件/常数并将它们放在一起meccano风格。