'#!'执行awk脚本时无法识别为内部或外部命令

时间:2019-12-03 13:41:52

标签: windows awk cmd

遵循教程https://www.gnu.org/software/gawk/manual/gawk.html 我在具有简单awk脚本的Windows上创建了一个cmd文件

cell.setCellValue(getLabel(rsmd.getColumnName(i)));

但是Windows不接受Shebang符号#!并抛出一个错误:

  

'#!'不被识别为内部或外部命令,可操作   程序或批处理文件。

如何使文件在Windows cmd上可执行?

1 个答案:

答案 0 :(得分:2)

“ shebang”(尖锐+爆炸)符号#!非常具体地是Unix / Linux内核。当您使用exec(2)系统调用来执行文件时,逻辑将查看文件是否为脚本,如果是,则在其上调用指定的解释器,而不仅仅是期望文件本身是可执行二进制文件。我认为没有任何类似的方法可以在Windows上使用CMD将带有任意解释器的脚本转换为可直接执行的命令。

您可以做的是选择一个文件后缀(例如.awk),将该后缀与Explorer中的awk可执行文件相关联,然后使用start(或双击)运行awk脚本。仅输入裸文件名。

但是您要将awk脚本转换为可以在CMD提示符下运行的命令,最可靠的方法是制作一个手动在文件上运行awk的批处理(.bat)文件。看起来像这样(假设awk脚本文件与批处理文件位于同一文件夹中):

@echo off
awk -f "%~dp0filename.awk"

这是一个根据您的脚本构建的工作示例:

C:\>echo %PATH%
c:\users\mjreed\bin;C:\windows\system32;C:\windows;...

C:\>type \users\mjreed\bin\hello.bat
@echo off
awk -f "%~dp0hello.awk"

C:\>type \users\mjreed\bin\hello.awk
BEGIN { print "Don't Panic!" }

C:\>hello
Don't Panic!