- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 rem
命令在包含多个命令的命令行中添加注释。下面是一些例子来说明我的意思:
echo Hello & rem.Comment & echo world!
(echo Hello & rem.Comment) & echo world!
这工作得很好,每行中的两个 echo
命令都按我预期的那样执行。 .
似乎修改了 rem
命令的行为,因此它不会将剩余的行视为注释:
Hello
world!
如果我放置一个 SPACE(或任何其他分隔符 TAB、、
、;
、 =
) 而不是 .
,剩余的行和第二个 echo
将被忽略(对于第二个示例,More?
出现提示,因为 )
是备注的一部分,cmd
期望结束 )
因为 (
):
Hello
我发现除了 .
之外,以下字符也可以使用::
、/
、\
、[
、]
和 +
。
其他有效的是转义分隔符:^
SPACE、^
TAB、^、
, ^;
和 ^=
。
不过,是否有安全可靠的方法来做到这一点?
如果有一个同时适用于命令提示符和批处理文件的解决方案,我将非常高兴。
根据 this external reference ,用于返回空行的熟悉语法 echo.
在某些情况下会失败,因此建议使用 echo(
,因为这是唯一可靠的方法。
但是,对于 rem
,(
不起作用,rem(
之后的所有内容都不会被识别为命令。
因为我知道 Windows XP 中的 rem
命令有一个奇怪的错误(引用 this external link : rem %~
),所以我对适用于 Windows Vista、Windows 7 或更高版本的解决方案。
最佳答案
“奇怪的”REM %~
“bug”并不局限于 XP。它存在于所有使用 CMD.EXE 的现代 Windows 版本中。看完你的问题后,我wrote Simon of SS64 a note澄清问题。如果变量 var 存在,并且您有 rem %var:=
,REM 也会失败。
所以从技术上讲,盲目使用 REM 并不能保证安全。
但是,如果您愿意接受致命的 % 扩展风险,那么您列出的大多数黑客都可以安全使用,但只有该行包含至少一个通过 & 的附加命令
或 &&
。
REM.
如果存在名为 REM
(无扩展名)的文件,则在任何情况下都无法安全使用。
如果当前文件夹包含名为 test.bat
的文件并且您使用 REM,则文件夹分隔符
.\
和 /
总是失败\..\test.bat
以类似的方式,REM:\..\test.bat
总是失败。
在类似的情况下,其他每一个 hacks 都可能单独失败。例如,REM^[tab]\..\test.bat
单独运行失败,但与另一个命令连接时可以运行。这是我发现的唯一一种情况,其中 +
、[
、]
或 ^[tab]
可能会失败。
还有一些其他黑客可能会失败的其他情况。
集合C中的任意字符(^[space]
, ^,
, ^;
, ^=
) 如果 remC.bat
存在,则在文件名中有效的文件名可能会失败。例如,以下独立失败:
rem^ Fails if "rem .bat" exists
然而,当与另一个命令连接时,它们都是安全的:
echo OK&rem^ This is safe
rem^ This is safe &echo OK
临时更新
以上有些地方是错误的。调查正在进行中 http://www.dostips.com/forum/viewtopic.php?f=3&t=6895&p=44813#p44813 .
我相信以下是保证在所有情况下都有效的最简单形式(忽略无效的 % 扩展)
REM: At least one space (or other token delimiter) must be after :
REM\ At least one space (or other token delimiter) must be after \
REM/ At least one space (or other token delimiter) must be after /
REM^[tab] At lease one space (or other token delimiter) must be after [tab]
但在尘埃落定之前我不会更正之前的信息
结束临时更新
我最喜欢使用内联注释的方式是使用不可能的变量。只有动态伪变量可以在名称中包含 =
,并且任何变量名称都不能包含两个 =
。所以我喜欢用%= Remark goes here =%
。这种形式的美妙之处在于它几乎可以在任何地方使用而不受惩罚,只要注释不包含 %
或 :
。它甚至可以在带括号的代码块中安全使用。
for %%F in (*) do (
%= Comment within code block =%
%= 2nd comment within code block =%
FINDSTR /B %=Must match beginning of line=% "string" %= Search string =% "%%F" %= File to search =%
)
关于windows - 如何在不忽略相邻命令的情况下在命令行中可靠地使用 `rem`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34780433/
我是一名优秀的程序员,十分优秀!