从Windows批处理文件中调用gawk -v pwd =%cd%时,我丢失了斜杠

时间:2017-09-04 13:46:02

标签: windows batch-file awk gawk

我想从windows脚本(批处理文件)调用awk / gawk脚本。

我也想传入当前目录。所以我有以下几行:

gawk -v pwd=%cd% -f myscript.awk sometextfiletoprocess.txt

在批处理文件中如果我echo %cd%我得到“c:\ dev \ work \ PIC \”

但是在awk脚本中,我在开始时有以下内容:

BEGIN {
    print "pwd: " pwd
}

这给出了输出“c:devworkPIC” - 所以你可以看到我正在丢失所有斜杠。我猜awk不喜欢“\”?我怎样才能让我的斜线回来?

编辑我尝试在%cd%gawk -v pwd="%cd%" -f myscript.awk sometextfiletoprocess.txt周围使用引号。这没有效果:(

1 个答案:

答案 0 :(得分:3)

pwd="\foo\bar" awk 'BEGIN{pwd=ENVIRON["pwd"]; ...}' 解释转义序列(请参阅http://cfajohnson.com/shell/cus-faq-2.html#Q24),以便我猜测导致您出现问题的原因。

如果你想要包括从字面上传递给awk的转义,那么你应该使用ENVIRON:

awk 'BEGIN{pwd=ARGV[2]; ARGV[2]=""; ARGC--; ...}' file "\foo\bar"

或将其作为arg与文件名一起传递:

$ cat tst.awk
BEGIN {
    print "pwd1:", pwd1

    print "---"

    pwd2=ENVIRON["pwd2"]
    print "pwd2:", pwd2

    print "---"

    pwd3=ARGV[ARGC-1]; ARGV[ARGC-1]=""; ARGC--
    print "pwd3:", pwd3
}

$ pwd2='c:\dev\work\PIC\' awk -v pwd1='c:\dev\work\PIC\' -f tst.awk 'c:\dev\work\PIC\'
awk: warning: escape sequence `\d' treated as plain `d'
awk: warning: escape sequence `\w' treated as plain `w'
awk: warning: escape sequence `\P' treated as plain `P'
pwd1: c:devworkPIC\
---
pwd2: c:\dev\work\PIC\
---
pwd3: c:\dev\work\PIC\

例如:

 Access-Control-Allow-Origin :  *

修改上述UNIX语法以执行正确的Windows咒语(或者更好的安装/使用cygwin)。