如何使用特殊字符修改环境变量?


0

我的提示设置为$P$_CMD>(末尾有空格)。这非常有效。但是,virtualenvactivate.bat有以下几行:

set PROMPT=(approot) %PROMPT%

当我运行该命令时,cmd抱怨这一点

The syntax of the command is incorrect.

在我改变提示之前没有发生这种情况。我尝试过添加引号(双引号"和单引号'%PROMPT%,但这不起作用。当旧值包含特殊字符时,如何使用旧值修改提示?


请注意,可以使用b $G而不是>在提示符中解决此问题。键入prompt /?以查看所有选项。
Andres Riofrio

1
正如您的评论所述(您可能应该自行回答),您不应该首先使用特殊字符。所有特殊字符都有special code替代品。这不是一种解决方法,它是如何设计的。
鲍勃

特殊代码替换是否适用于其他环境变量?
Andres Riofrio

不,这些是专门针对提示的。它们仅在显示提示时被转换; 它们存储为代码。
鲍勃

@AndresRiofrio尝试设置a => < - 错误。尝试设置a = ^> < - 这是有效的。但是回声%a%给出一个错误,回声“%a%”有效,但用引号围绕着整个事情
barlop

Answers:


1

使用提示变量,您永远不应该使用特殊字符。始终尽可能使用special codes可以找到的prompt /?

回应你的评论:

使用其他变量,您可以使用SetLocal EnableDelayedExpansion。然后用!s而不是s来引用变量%

延迟扩展将导致变量在执行时而不是在解析时扩展,此选项随着打开而打开SETLOCAL command。当延迟扩展有效时,可以使用!variable_name!(除正常之外%variable_name%)引用变量

由于变量在执行时被扩展,并且特殊字符>(在这种情况下)仅在解析时特殊,因此您完全回避问题。

例如:

SetLocal EnableDelayedExpansion

set test=World^>
set test2=Hello !test!

请注意,这^是转义字符,允许您输入特殊字符(变量将存储为World>,因此除非您确实set test=World^^^>导致存储的值,否则World^>这将不适用于您的问题。

逃避可能会变得复杂。例如,要设置test2为文字!test!,您需要使用^^!test^^!,否则您只需获取值test。如果我真的需要,我通常只是改变转义字符的数量,直到它工作,它比试图找出解析规则容易。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.