【发布时间】:2018-03-16 20:08:36
【问题描述】:
您好,感谢您的帮助。
我在转义 Windows 批处理脚本中的单引号字符 (') 时遇到了困难。我试过 ^'、\'、'''、'\'' 等等。在线搜索也没有解决它。我被难住了。
此脚本使用 cgywin64 gawk 格式化文件夹列表:
@echo off
du -sk ./* | sort -nr | head -40 | gawk '{printf("%%^'14d kB %%s %%s %%s %%s %%s %%s %%s %%s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9)}'
运行时出现以下错误:
gawk: cmd. line:1: {printf("%^14d
gawk: cmd. line:1: ^ unterminated string
gawk: cmd. line:1: {printf("%^14d
gawk: cmd. line:1: ^ syntax error
不进行任何字符转义,gawk 命令看起来像:
gawk '{printf("%'14d kB %s %s %s %s %s %s %s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9)}'
开头的格式字符串 (%'14d) 告诉 gawk 在打印整数时使用逗号(“123456789”打印为“123,456,789”)。 这个字符串有一个单引号('),我不知道如何正确地传递给批处理脚本。
那么如何将单引号 (') 传递到批处理脚本中?
任何帮助表示赞赏。
【问题讨论】:
-
试试命令行:
du -sk ./* | sort -nr | head -40 | gawk "{printf(\x22%%'14d kB %%s %%s %%s %%s %%s %%s %%s %%s\n\x22, $1, $2, $3, $4, $5, $6, $7, $8, $9)}"。我没有安装 gawk。有关为什么在参数字符串周围使用"并在带有\x22的字符串内引用"的详细信息,请参阅gawk command in CMD with && operator not working 上的答案。 -
单引号不应该是一个问题,但是你的双引号和百分比字符是。您可能会发现官方的user guide 建议值得一读。
-
Single quotes have no special meaning in Windows batch,所以
'{printf("%%^'14d kB %%s %%s %%s %%s %%s %%s %%s %%s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9)}'不是您预期的单个参数。您必须始终使用"。或者只是更改为可以使用单引号的powershell -
莫菲,谢谢你们的cmets。不幸的是,添加 \x22 失败,在 \x22 处出现语法错误。但是下面的 Compos 回答有效。再次感谢大家的帮助!
标签: windows batch-file awk gawk