带参数的批处理脚本

时间:2015-09-22 06:31:08

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

我对批处理比较新。我写了一个小脚本,它进入一些特定的目录并执行一个命令(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" 

但是我得到语法无效的错误

我做错了什么?

3 个答案:

答案 0 :(得分:0)

将您的代码更改为

 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 ......依此类推。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

  

与FOR命令的其他变体不同,您必须包含通配符   ('file_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"
)