回到90年代中期,我记得做过类似这样的事情:
if %1==. dir
基本上,如果你将以上代码放在dodir.bat
中,并在不传递任何参数的情况下单独运行它,它将运行dir命令。但是,如果你传递任何参数,它将不会运行dir命令。
我似乎无法在我的Windows 7批处理文件中使其工作。也许我不记得正确的语法了。有任何帮助者吗?
回到90年代中期,我记得做过类似这样的事情:
if %1==. dir
基本上,如果你将以上代码放在dodir.bat
中,并在不传递任何参数的情况下单独运行它,它将运行dir命令。但是,如果你传递任何参数,它将不会运行dir命令。
我似乎无法在我的Windows 7批处理文件中使其工作。也许我不记得正确的语法了。有任何帮助者吗?
if %1.==. dir
如果参数包含像 "
, <
等各种符号,将会出现问题。
if "%1"==""
如果参数包含引号 ("
) 将会出现问题。
使用 if "%~1"==""
代替:
if "%~1"=="" (
echo No parameters have been provided.
) else (
echo Parameters: %*
)
这应该适用于所有版本的Windows和DOS。
单元测试:
C:\>test
No parameters have been provided.
C:\>test "Lots of symbols ~@#$%^&*()_+<>?./`~!, but works"
Parameters: "Lots of symbols ~@#$%^&*()_+<>?./`~!, but works"
其实过去它是这样写的:if %1.==. command
(注意%1
后面的点号)。并且在Windows 7中现在也可以使用,应该能够正常工作。
示例用法:
if %1.==. (
echo No parameters have been provided.
) else (
echo Parameters:
echo %*
)
%1
为空字符串时出现语法错误。它可以是其他字符,事实上,我曾经看到过其他字符被使用(例如if %1A==A
),但是在这种特定模式中,“.”可能是最常用的。请注意,这种模式在过去、在DOS时代非常流行。现在,像Tolga建议的那样,if "%~1"==""
是首选方法。 - Andriy M尝试用引号括起来:
if "%1"=="" (
echo "nothing was passed"
) else (
echo "a parameter was passed"
dir
)
你可以删掉这些echo,我只是为了教育目的而放置它们。