Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 作用域如何在.cmd文件中工作?_Batch File_Command - Fatal编程技术网

Batch file 作用域如何在.cmd文件中工作?

Batch file 作用域如何在.cmd文件中工作?,batch-file,command,Batch File,Command,我有一个.cmd文件脚本,我运行它来检查用户是否在广告组中 过程是这样的: 更新他们的广告群列表 检查他们是否有正确的组来安装应用程序 如果函数结果为N,则跳到下一个检查 这是我的剧本: REM ======== SET variables ======== SET @ADGroups=C:\APPS\%USERNAME%\ADGroups.txt REM ======== update AD groups ======== gpresult /r > %@ADGroups%

我有一个.cmd文件脚本,我运行它来检查用户是否在广告组中

过程是这样的:

更新他们的广告群列表 检查他们是否有正确的组来安装应用程序 如果函数结果为N,则跳到下一个检查 这是我的剧本:

REM ======== SET variables ========
SET @ADGroups=C:\APPS\%USERNAME%\ADGroups.txt


REM ========  update AD groups ========
gpresult /r  > %@ADGroups% 


REM ======== APP1 =========
call:Check_ADGroup "App1 Name"
IF %@InGroupYN% == Y  (
    call:Install_App
) 

REM ======== APP2 =========
call:Check_ADGroup "App2 Name"
IF %@InGroupYN% == Y  (
    call:Install_App
) 
出于某种原因,@InGroupYN始终作为Y运行,而不管函数返回的是true还是false


命令行中的变量是否需要考虑某些作用域?

无需更改结构

如果定义如下,为什么不使用:

Rem===========设置变量======== 设置@ADGroups=C:\APPS\%UserName%\ADGroups.txt Rem========更新广告组======== GPResult/R>%@ADGroups% Rem=APP1========= 呼叫:检查ADU组App1名称 如果定义为@InGroupYN 电话:安装应用程序 Rem=APP2========= 呼叫:检查ADU组App2名称 如果定义为@InGroupYN 电话:安装应用程序 然后使用条件集删除不必要的For循环和If/Else:

雷姆--------------------------- Rem-AD组中的功能检查 雷姆--------------------------- :检查组 Rem===========未定义变量======== 设置@InGroupYN= Rem========如果匹配,则设置为“是”======= FindStr/IRC:%~1%@ADGroups%>num&&Set@InGroupYN=Y 后藤:EOF
你能给我解释一下这是如何工作的,或者链接到一个我可以阅读的源代码,因为我对语法不太熟悉-顺便说一句,这工作得非常好!ThanksA变量只有在有值时才被定义,Set@InGroupYN=通过显式地不给它任何值来确保没有%@InGroupYN%变量是一个条件执行器,它的意思是“如果最后一个命令成功”。它有一个相反的| |意思是“如果最后一个命令不成功”。并非每个命令都报告成功或其他情况相同,FindStr是报告成功的命令。谢谢。最后一个问题。为什么Findstr不需要像我以前那样进行for循环?因为你没有保存它的返回值,只需要它的成功或其他。我认为你的代码应该可以工作,我找不到任何错误。你是否希望广告组能敏感地匹配案例?
::--------------------------------------------------------
::-- Function Check In AD GROUP
::--------------------------------------------------------
:Check_ADGroup

SET @Result=[]
SET @InGroupYN=N

FOR /F "delims=" %%a in ('FINDSTR /rc:"%~1" %@ADGroups%') DO SET @Result=%%a


IF @Result == [] (
    REM ======== Set to No ======== 
    SET @InGroupYN=N

) ELSE (
    REM ======== Set to Yes ======== 
    SET @InGroupYN=Y
)
goto:eof