带参数的批处理脚本

batch script with argument

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

但我收到语法无效的错误

我做错了什么?

将您的代码更改为

 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:

@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

Unlike other variants of the FOR command you must include a wildcard (either * or ?) in the 'folder_set' to get consistent results returned. 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"
)