gpt4 book ai didi

windows - 在 Batch 的 endlocal 之后保留变量

转载 作者:可可西里 更新时间:2023-11-01 11:42:00 26 4
gpt4 key购买 nike

我有一个文件夹结构,例如C:\Temp\,里面有很多文件夹和文件,每个文件夹里都有一个“callme.bat”。我想创建一个所谓的 main.bat,它在主窗口中一个接一个地调用 callme 文件。但是有一个问题,在 callme 文件中有一些包含“!”的回声。标记对我来说是什么问题。

我意识到 setlocal-endlocal 组合的问题,因为批处理脚本想要解释“!”内的消息。标记,所以我必须使用 endlocal,但如果我这样做了,我将无法运行 callme bats。

callme.bat

@echo off
echo !!! hidden message !!! not hidden message
pause

main.bat 变体 1

@echo off
setlocal enabledelayedexpansion

set PATH=C:\Temp
for /F %%x in ('dir /B/A:D %PATH%') do (
set CURR_DIR=%PATH%\%%x
set ACTUAL_BATCH=!CURR_DIR!\callme.bat
echo !ACTUAL_BATCH!

call !ACTUAL_BATCH!
pause
)
pause
exit

main.bat 变体 2

@echo off
set PATH=C:\Temp
for /F %%x in ('dir /B/A:D %PATH%') do (
setlocal enabledelayedexpansion

set CURR_DIR=%PATH%\%%x
set ACTUAL_BATCH=!CURR_DIR!\callme.bat
echo !ACTUAL_BATCH!

ENDLOCAL & SET VAR=!ACTUAL_BATCH!
echo %VAR%
pause
)
pause
exit

main.bat 变体 3

@echo off
set PATH=C:\Temp
for /F %%x in ('dir /B/A:D %PATH%') do (
setlocal enabledelayedexpansion

set CURR_DIR=%PATH%\%%x
set ACTUAL_BATCH=!CURR_DIR!\callme.bat
echo !ACTUAL_BATCH!

REM source: https://stackoverflow.com/questions/3262287/make-an-environment-variable-survive-endlocal
for /f "delims=" %%A in (""!ACTUAL_BATCH!"") do endlocal & set "VAR=%%~A"
echo %VAR%

call %VAR%
pause
)
pause
exit

所以我不知道该怎么办。有人有想法吗?

变体 1 的输出:

C:\Temp\1\callme.bat
not hidden message
C:\Temp\2\callme.bat
not hidden message

变体 2-3 的输出:

C:\Temp\1\callme.bat
ECHO is off.
C:\Temp\2\callme.bat
ECHO is off.

最佳答案

长话短说

ENDLOCAL&set "varname=%sourcevarname%"

可能,其中 varname 是要设置的变量名,sourcevarname 是要将其值分配给 varname 的变量 - 并且它们 < strong>可以 是相同的名称,即使该语句在逻辑上显示为 null - 它从 setlocal/endlocal block 中导出变量。

要点:必须在一条物理线路上,必要时可以重复(即

 ENDLOCAL&set "varname=%sourcevarname%"&set "varname2=%sourcevarname2%"

所以

 ENDLOCAL&set "fred=%fred%"&set "bill=%george%"

是完全有效的,将 setlocal/endlocal 括号外的 fred 的值设置为其内部的最终值,并将 bill 外部的值设置为 的最终值乔治在里面。

关于windows - 在 Batch 的 endlocal 之后保留变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56702655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com