gpt4 book ai didi

batch-file - 如何设置变量,然后在命令提示符下的同一行中使用它

转载 作者:行者123 更新时间:2023-12-04 17:18:57 25 4
gpt4 key购买 nike

我想设置一个变量%p%,然后在CMD的同一行中使用它。

例如。:

set p=notepad.exe&%p%

这行不通。但是 %p%设置为下一行。因此,如果我第二次执行此行,它将起作用。

如何在同一行中使用 %p%

最佳答案

在执行批处理文件时,将首先解析然后执行每行或每行(括号中的行)。在解析期间,在执行命令之前,将对变量的读取操作替换为变量内部的值。因此,如果在行/块中更改了变量值,则您将无法检索到此更改后的值,因为解析器在更改前已删除了对变量中的值的读取操作。

所以,你的代码

set p=notepad.exe&%p%

解析并转换为
set p=notepad.exe&

其中获取%p%的读取操作已替换为变量中的值(该示例假定变量为空)。然后执行此解析的行。

为什么第二遍起作用?因为在上一次运行中已经设置了变量,并且如果尚未将其重置,则在解析器在第二次运行中进行替换时,该变量将包含要替换的值。

要查看这是执行行为之前的解析,可以将行更改为
set p=notepad.exe&set p

也就是说,设置变量并转储环境内容(以p开头的变量),您将看到该变量已设置为notepad.exe。由于此行不包含对变量的任何读取操作,因此一切正常。

如何解决您的问题?有一些选择

延迟扩展

启用延迟扩展后,可以根据需要将变量读取的语法从%var%更改为!var!,以向解析器指示需要延迟对读取操作的替换,直到命令执行为止。
setlocal enabledelayedexpansion
set p=notepad.exe&!p!

如果使用/v:on调用命令处理器,则可以启用相同的行为
cmd /v:on /c "set p=notepad.exe&!p!"

对命令进行第二次解析

这使用call命令在该行上强制进行第二次解析
set p=notepad.exe&call %%p%%

第一次默认解析将文字%%p%%替换为文字%p%(%%是一个转义的百分号),而不进行任何变量替换,并且当执行call命令时,再次解析该行,因此文字%p%被解释为读取的变量并替换为变量中的值

使用什么?这取决于。延迟扩展解决方案的执行时间比call解决方案(call命令执行的工作更多)更好,但是,启用延迟扩展后,数据中包含的感叹号字符(!)成为需要正确处理的问题。

关于batch-file - 如何设置变量,然后在命令提示符下的同一行中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26251171/

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