我对批处理比较新。我写了一个小脚本,它进入一些特定的目录并执行一个命令(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"
但是我得到语法无效的错误
我做错了什么?
答案 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"
)