【问题标题】:What does symbol ^ mean in Batch script?符号 ^ 在批处理脚本中是什么意思?
【发布时间】:2021-11-03 21:04:54
【问题描述】:

在这个命令中:

FOR /F %%A IN ('TYPE "%InFile%"^|find /v /c ""')DO SET "Till=%%A"

^ 是什么意思?

【问题讨论】:

标签: windows batch-file


【解决方案1】:

^ 符号(也称为脱字符号或抑扬符)是批处理脚本中的转义字符。使用时,下一个字符被解释为普通字符。

在您的脚本中,将 TYPE 命令的输出作为 FIND 命令的输入写入。
如果在| 之前不使用转义字符^,那么| 的常规含义就是pipe character

Documentation 说:

要在使用 echo 时显示竖线 (|) 或重定向字符(),请在竖线或重定向字符(例如,^>、^

【讨论】:

  • 更好,但还是有点模糊。见my answer
  • @dbenham 不错的答案:+1
【解决方案2】:

插入符号 '^' 字符在 Windows 批处理文件中有两个用途:

1.续行:

~~~

@echo off

dir ^
/ad ^
c:\temp

~~~~

结果是 dir /ad c:\temp,它只列出 C:\temp 中的目录。

2。转义保留的 shell 字符 & | ( ^.

使用前面的插入符号来转义并打印字符:

echo this pipe will print ^| but this one won't |
echo and this will print one caret ^^

【讨论】:

  • 1 - 续行是 2 - 一般转义下一个字符行为的特例。如果^ 后面的字符是换行符,则换行符被删除,并且后续字符被转义
【解决方案3】:

Infinite Recursion describes the general behavior of ^,但对于为什么必须在IN ('yourCommand') 中使用它有点模糊。

yourCommand 实际上是在其自己的 CMD.EXE 进程中使用C:\Windows\system32\cmd.exe /c yourCommand 隐式执行的。显然,在您的情况下,管道必须包含在命令中。但是整行必须由批处理解析器解析,然后才能传递 IN() 子句以执行。如果没有^| 会混淆批处理解析器。 ^ 在初始批处理解析期间转义(保护)管道。

【讨论】:

  • 感谢您的回答 payeli。您可以查看 ^| 的代码吗?在我的批处理文件中使用。SET "InFile=test.txt" SET "OutFile=out.txt" SET "Replace=test" SET "ReplaceWith=sample" REM 获取总行数 [包括空行] FOR /F %% A IN ('TYPE "%InFile%"^|find /v /c ""') DO SET "Till=%%A" REM 创建带有更改的 OutFile SETLOCAL EnableDelayedExpansion >"%OutFile%" ENDLOCAL
  • @user3059908 - 几乎不可能阅读您评论中的代码,我不知道您的问题是什么。也许您应该使用格式正确的代码和明确说明的问题创建一个新问题。 (描述预期的行为,以及它是如何不工作的)
【解决方案4】:

在给定的示例中,插入符号用于转义特殊符号。 虽然它在 windows 命令中有其他用法

1] 在集合中它是一个 XOR 运算符:

set /a "_num=5^3"    &::0101 XOR 0011 = 0110 (decimal 6)

2] 在 findstr 中用于在行首查找字符串的正则表达式:

Echo 12G6 |FindStr /R "[^0-9]"  &::this will check for non-numeric characters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    • 2013-03-11
    • 1970-01-01
    • 2013-05-14
    • 2013-09-23
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多