如何将单引号 (') 传递到批处理脚本中?
How to pass a single quote (') into a batch script?
您好,感谢您的帮助。
我在 Windows 批处理脚本中转义单引号字符 (') 时遇到困难。我试过 ^'、\'、'''、'\'' 等等。网上搜索也没有解决。我被难住了。
此脚本使用 cgywin64 gawk 格式化文件夹列表:
@echo off
du -sk ./* | sort -nr | head -40 | gawk '{printf("%%^'14d kB %%s %%s %%s %%s %%s %%s %%s %%s\n", , , , , , , , , )}'
当运行时,它给我以下错误:
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", , , , , , , , , )}'
开头的格式字符串 (%'14d) 告诉 gawk 在打印整数时使用逗号(“123456789”打印为“123,456,789”)。
这个字符串有一个单引号 ('),我不知道如何正确地传递到批处理脚本中。
那么如何将单引号 (') 传递到批处理脚本中?
感谢任何帮助。
以下建议未经测试,目前基于我有限的理解。
gAwk 在 POSIX-compliant、Bourne-style shell 中使用单引号,其中 cmd.exe 不是一个。
与cmd.exe那些用于引用的单引号'
,需要用双引号代替,"
.
不用于引用的单引号 %'14d
不需要 gAwk 特别注意,因为双引号内的字符受到保护。
在cmd.exe中单引号没有问题,所以这个字符可以保持不变。
所以在cmd.exe中需要将周围的单引号'{
和}'
替换为双引号"{
和}"
.
然后您必须转义内部双引号以防止 cmd.exe 过早地关闭开头的 "{
。
在 cmd.exe 中,双引号通常通过在其前面加上反斜杠来转义,\"
.
因此,您在 cmd.exe 中的命令将如下所示:
du -sk ./* | sort -nr | head -40 | gawk "{printf(\"%'14d kB %s %s %s %s %s %s %s %s\n\", , , , , , , , , )}"
以上建议适用于cmd.exe;但是,当 运行 来自批处理文件时,还有一个问题。
所有百分号字符都需要加倍! %
变成 %%
.
鉴于以上所有内容,请记住这是完全未经测试的,您在批处理文件中的命令将是:
du -sk ./* | sort -nr | head -40 | gawk "{printf(\"%%'14d kB %%s %%s %%s %%s %%s %%s %%s %%s\n\", , , , , , , , , )}"
您好,感谢您的帮助。
我在 Windows 批处理脚本中转义单引号字符 (') 时遇到困难。我试过 ^'、\'、'''、'\'' 等等。网上搜索也没有解决。我被难住了。
此脚本使用 cgywin64 gawk 格式化文件夹列表:
@echo off
du -sk ./* | sort -nr | head -40 | gawk '{printf("%%^'14d kB %%s %%s %%s %%s %%s %%s %%s %%s\n", , , , , , , , , )}'
当运行时,它给我以下错误:
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", , , , , , , , , )}'
开头的格式字符串 (%'14d) 告诉 gawk 在打印整数时使用逗号(“123456789”打印为“123,456,789”)。 这个字符串有一个单引号 ('),我不知道如何正确地传递到批处理脚本中。
那么如何将单引号 (') 传递到批处理脚本中?
感谢任何帮助。
以下建议未经测试,目前基于我有限的理解。
gAwk 在 POSIX-compliant、Bourne-style shell 中使用单引号,其中 cmd.exe 不是一个。
与cmd.exe那些用于引用的单引号'
,需要用双引号代替,"
.
不用于引用的单引号 %'14d
不需要 gAwk 特别注意,因为双引号内的字符受到保护。
在cmd.exe中单引号没有问题,所以这个字符可以保持不变。
所以在cmd.exe中需要将周围的单引号'{
和}'
替换为双引号"{
和}"
.
然后您必须转义内部双引号以防止 cmd.exe 过早地关闭开头的 "{
。
在 cmd.exe 中,双引号通常通过在其前面加上反斜杠来转义,\"
.
因此,您在 cmd.exe 中的命令将如下所示:
du -sk ./* | sort -nr | head -40 | gawk "{printf(\"%'14d kB %s %s %s %s %s %s %s %s\n\", , , , , , , , , )}"
以上建议适用于cmd.exe;但是,当 运行 来自批处理文件时,还有一个问题。
所有百分号字符都需要加倍! %
变成 %%
.
鉴于以上所有内容,请记住这是完全未经测试的,您在批处理文件中的命令将是:
du -sk ./* | sort -nr | head -40 | gawk "{printf(\"%%'14d kB %%s %%s %%s %%s %%s %%s %%s %%s\n\", , , , , , , , , )}"