使用脱字符号 (^) 拆分长命令不适用于批处理文件中的管道 (|)

2023-12-22

答案关于这个问题 https://stackoverflow.com/q/69068/3705191声明可以通过使用插入符将长命令分成多行(^)。一个答案提供了技术描述:

插入符号 and 换行符其后的被删除完全来自命令

然而,这似乎并不总是有效piping命令并使用管道符号 (|).

看看下面的例子:


要拆分的代码:

dir | sort
❌ 不起作用
dir ^
| sort
✅ 有效 #1
dir ^
 | sort

Notice the space in 2nd line

✅ 作品 #2
dir |^
sort

很想知道为什么会出现这种情况:)


As 这个答案 https://stackoverflow.com/a/4455750/3705191有点神秘地指出了插入符号 (^)的工作原理如下:

行尾有插入符号:

  • 删除后面的换行符(例如将 2 行变成 1 行)
  • escapes下一行的第一个字符
  • 删除插入符号 (^)你输入

由于管道符号| is the first下一行的字符,它将是escaped从而失去其特殊含义,仅被解释为文本字符。


例子:

dir ^
/B

变成:

dir ^/B

The ^字符是转义字符。正斜杠/没有特殊含义,因此转义它没有任何效果,使命令按预期工作并有效地将其变成这样:

dir /B

然而,看看这个:

dir ^
& echo hello

变成:

dir ^& echo hello

Which escapes特别的&字符(具有执行正确命令的特殊含义after左边那个)。你会得到一个错误,因为所有& echo hello将作为参数发送到dir命令。


这意味着像这样的事情will work:

dir ^
& & echo hello

变成:

dir ^& & echo hello

首先&被逃脱,而第二个&被正确解释。这将运行dir ^&,发送&(原始文本字符)作为目录参数dir, and then run echo hello因为第二个&角色正常工作。dir ^&会失败,因为“&”不是有效的目录,然后echo hello将打印出“你好”。


回到piping,让我们看一下您提供的不起作用的示例:

dir ^
| sort

变成:

dir ^| sort

管道符号|将会被逃脱并且not被解释为管道(它将显示为文本字符)。因此,“| sort”将作为参数发送到dir命令,它将找不到该目录,并且失败。


要解决这个问题,正如您已经想到的,您需要添加一个空格在下一行的开头。

这样,space将被转义,而后续的管道符号|将被解释为正常:

dir ^
 | sort

变成:

dir ^ | sort

这实际上是:

dir | sort
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用脱字符号 (^) 拆分长命令不适用于批处理文件中的管道 (|) 的相关文章

  • 如何将逗号分隔的字符串解析为列表(警告)?

    我需要能够采用如下字符串 foo bar one two three four into foo bar one two three four 我有一种感觉 来自 python 的提示 解决方案将涉及 shlex 模块 这取决于您想要变得多
  • 如何仅回显“开”或“关”文本?

    大家都知道 在 Windows 命令文件中 cmd echo on echo off 启用和禁用回显 但是如何仅回显文本 on 或文本 off IE 如何发送文本 on off to stdout 目标系统 Windows XP 那么在 D
  • 批处理文件 - 读取特定行,并将该行中的特定字符串保存为变量

    有没有办法让 for f 循环 或其他任何东西 读取特定行 这是我到目前为止的代码 它读取每一行的第一个单词 echo off set file readtest txt for f tokens 1 delims A in file do
  • dup2() 和 exec()

    include
  • 如何在 R 中关闭管道连接之前获取输出?

    在 R 中 我们可以使用以下命令打开管道连接pipe 并写信给它 我观察到以下情况 我不太明白 让我们使用一个python管道例如 z pipe python open w cat x 1 n file z cat print x n fi
  • 使用 execv 和输入重定向的 C++ 管道命令

    尝试编写一个处理内部和外部命令的 shell 我一次可以获得内部命令和一个外部命令 我的问题是如何运行这样的命令 ls l grep lib wc l 我正在使用 fork 并通过 char 中的 execv 传递外部命令 关于如何工作有什
  • 批量修改XML文件

    好的 所以我不太熟悉使用 For F 如果文件是静态的并且有一组可以跳过然后从中提取数据的行 我可以修改它 我目前正在尝试修改 XML 文件 该文件将具有不同数量的行 但始终具有以下内容
  • 使用管道在父级和子级之间传递整数值

    我对如何正确使用 pipeline 在两个进程之间传递整数值有点困惑 在我的程序中 我首先创建一个管道 然后分叉它 我假设我有 两个 管道 据我了解 这是我的任务 我的父母通过 for 循环检查某个操作的整数值 i 增加计数变量 并将值保存
  • REG ADD - 语法无效

    我试图通过在批处理文件中使用以下代码行来修改注册表中的值 但当我在参数周围使用双引号时 我不断收到 错误 语法无效 而当我使用单引号时 我不断收到 无效的键名 REG ADD HKLM SOFTWARE Microsoft Windows
  • 为什么 AngularJS 在使用 ng-bind-html 时会去掉 data- 属性?

    我正在使用 contentEditable div 来使用户能够格式化他们的文章 我对html内容做了一些处理并保留它 我在用ng bind html当观众想要阅读文章时呈现结果 我不想使用 sce trustAsHtml因为我仍然希望 A
  • 批处理:将文件移动到名称第一个字母的文件夹?

    我想要 3 个文件夹 A G H T 和 U Z 我希望文件能够根据名称的第一个字母通过批处理自动分类到这些文件夹中 有办法做到这一点吗 谢谢你 ECHO OFF SETLOCAL ENABLEDELAYEDEXPANSION SET so
  • 如何获取%CD%的父路径

    如何获取当前 CD 的父路径 例如 ECHO CD result C Windows System32 这不起作用 ECHO CD 期望的结果 C Windows 尝试更改当前目录 然后使用 cd pushd echo cd popd
  • 使用脚本清除 Internet Explorer 6.0 浏览历史记录

    我使用以下脚本删除 IE 7 0 中的浏览历史记录 RunDll32 exe InetCpl cpl ClearMyTracksByProcess 255 但现在我需要一个脚本来清除 IE 6 0 中的浏览历史记录 我收到一条错误消息 缺少
  • 批处理文件无法在条件语句中设置环境变量

    为什么 Windows 批处理文件输出以下内容Foo其次是Bar 而不是Baz echo off setlocal set Foo echo set Bar if 1 1 set Baz echo 我的系统 Microsoft Window
  • 批处理:在带有管道的 for 循环中执行带引号的命令来查找

    您能否建议如何修复下面的命令 该命令会从 svn 中删除未版本控制的项目 rem echo off for f tokens 2 i in c Program Files TortoiseSVN bin svn exe status no
  • 如何同时正确使用管道和信号?

    我有 2 个孩子 我想将信号从孩子发送到父母 并将答案 随机数 为什么 为什么不 命名管道从父母发送到每个孩子 我有这个代码 include
  • 访问另一个批处理文件中的批处理函数

    好吧 假设我们有一个名为 lib cmd 的文件 它包含 echo off GOTO EXIT FUNCTION echo something GOTO EOF EXIT exit b 然后我们有一个名为 init cmd 的文件 它包含
  • 2 批字符串问题

    1 是否有任何内置函数可以告诉我变量的内容是否仅包含大写字母 2 有没有办法查看变量是否包含字符串 例如 我想查看变量 PATH 是否包含 Ruby 对于第 1 部分 findstr就是答案 您只需使用正则表达式功能即可errorlevel
  • 排除批复制脚本中的文件夹

    我正在使用 U 盘上的批处理文件来备份我的照片 我使用以下命令 for r C x in jpg png gif do copy y x 我想排除邮件文件夹 WINDOWS 和 PROGRAM FILES 中的文件 有谁知道如何使用批处理文
  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了

随机推荐