【问题标题】:batch script with argument带参数的批处理脚本
【发布时间】:2015-09-22 21:02:38
【问题描述】:

我对批处理比较陌生。我写了一个小脚本,它进入一些特定的目录并执行一个命令(make):

FOR /d %%p IN (Test_*) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 

所以 Test_* 表示所有以 Test_ 开头的目录。

我也想用参数调用这个脚本,这样当我指定一个目录时我也会调用这个命令,例如,像这样:

myScript.bat Test_XY

代码应该是这样的:

SET Modus=%1
IF "%Modus%"==""(
FOR /d %%p IN (Test_*) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 
)
ELSE
FOR /d %%p IN (%1) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 

但我收到语法无效的错误

我做错了什么?

【问题讨论】:

  • IF "%Modus%"=="" ( 行中缺少空格(""( 之间);并且ELSE 必须与上面的) 在同一行(以空格分隔);

标签: batch-file command-line-arguments batch-processing


【解决方案1】:

与 FOR 命令的其他变体不同,您必须包含通配符 (* 或?)在“folder_set”中获得一致的结果 回来。 http://ss64.com/nt/for_d.html

SET Modus=%1
IF "%Modus%"=="" (
    FOR /d %%p IN (Test_*) do (
        FOR /d %%s IN (%%p\*) do make clean --directory "%%s"
    ) 
) ELSE (
    FOR /d %%p IN (%Modus%) do (
        FOR /d %%s IN (%%p\*) do make clean --directory "%%s"
    )
)

我会重写这个:

set "modus=%1"
if "%modus%"=="" (
    for /f "tokens=*" %%p in ('dir /b /a:d "Test_*"') do (
        echo make clean --directory "%%p"
    )
) else (
    for /f "tokens=*" %%p in ('dir /b /a:d "%modus%"') do (
        echo make clean --directory "%%p"
    )
)

更简单紧凑

set "modus=%1"
if "%modus%"=="" set "modus=Test_*"
for /f "tokens=*" %%p in ('dir /b /a:d "%modus%"') do (
    echo make clean --directory "%%p"
)

【讨论】:

    【解决方案2】:

    要在特定文件夹中执行如图所示的批处理文件, 在命令行上传递文件夹 - 你至少有这两个选项。

    1:

    @echo off
    cd /d "%~1"
    FOR /d %%p IN (Test_*) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 
    

    2:

    @echo off
    pushd "%~1"
    FOR /d %%p IN (Test_*) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 
    popd
    

    【讨论】:

      【解决方案3】:

      将代码更改为

       set var=%1
      IF [%1]==[] set "var=Test_*"    
      FOR /d %%p IN (%var%) do FOR /d %%s IN (%%p\*) do make clean --directory "%%s" 
      

      并像

      一样调用批处理脚本
      myscript.bat Test_XY
      

      %1 用于第一个参数。如果要使用多个参数,请使用 %1%2%3... 等等。

      【讨论】:

      • 好的,可以了。但我还想保留对所有目录执行此操作的命令(当我调用不带参数的脚本时)?
      • 这适用于参数,但如果我在没有参数的情况下运行脚本,我会收到错误:'var is not known as an internal or external command'
      • ups - 发现另一个错字。请再试一次。
      猜你喜欢
      • 2019-04-15
      • 2013-11-19
      • 2011-05-10
      • 1970-01-01
      • 2014-04-14
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多