您好,感谢您的帮助。
我很难在Windows Batch脚本中转义单引号字符(')。我试过^','',''','\''等等。在线搜索也没有解决它。我很难过。
此脚本使用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”)。 这个字符串有一个引号('),我无法弄清楚如何在没有错误的情况下传入批处理脚本。
那么如何将单引号(')传递给批处理脚本?
任何帮助表示感谢。
答案 0 :(得分:0)
以下建议未经测试,目前基于我的有限理解。
gAwk使用单引号引用符合POSIX标准的Bourne样式的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\", $1, $2, $3, $4, $5, $6, $7, $8, $9)}"
上面的建议适用于cmd.exe;但是当从批处理文件运行时,还有一个额外的问题。
所有百分比字符都需要加倍! %
变为%%
。
所以考虑到上述所有情况,记住这是完全未经测试的,您在批处理文件中的命令将是:
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)}"