首页 > 解决方案 > 通过 STRING NAME 批量检查空变量

问题描述

是否有一些从字符串批量重定向到变量的重定向?

主命令

@setlocal enableextensions Enabledelayedexpansion 
@echo off
set log=C:\log\test.log
set my_var=foo
set vars_to_check=my_var
call check_empty.cmd "%vars_to_check%"  || goto :error_handler

check_empty.cmd

if "%1" == "" (
    echo no param. >> !log!
    exit /b 2
    )
if not defined %1 ( 
    echo the variable %1 is empty.  >> !log!
    exit /b 1 
    )
echo %1 has value %%1%%.   >> !log!
exit /b 0

现在我确实运行了 main.cmd:我确实期望 echo 'my_var has value foo.'。但是,我只是得到“变量“%1”为空。请注意 %1 周围的引号。因此,我从 main.cmd 中的调用中删除了引号,它几乎可以正常工作,因为我收到消息:'my_var has value %my_var%.'。至少我到达了实现定义变量的地步。

避免引号的问题是下一步将是:传递多个变量并循环检查...

set vars_to_check=my_var some_other_var something_else

现在我需要引号,所以我可以传递变量......

标签: batch-file

解决方案


check_emtpy.cmd

@echo off
if "%~1" == "" echo no param. & exit /b 2
if not defined %~1 echo the variable %1 is empty.& exit /b 1
call echo %1 has value %%%~1%% & exit /b 0
  • 如果参数(变量名)为空,则返回(错误级别 2)
  • 如果未定义变量,则返回(错误级别 1)
  • 返回(错误级别 0)

如果您不需要该消息,则最后一行是可选的。如果你能保证总是有一个参数(但谁能保证......),第一个if也是可选的。


推荐阅读