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