是否可以将 Ruby 代码嵌入到批处理文件中?
Is it possible to embed a Ruby code into batch-file?
通常这对于“自调用”脚本很有用 notorious example
带有嵌入式代码的好脚本不应该使用丑陋的转义序列、没有临时文件和冗余输出。
可以用 Ruby 来完成吗?
是的,有一些 hacks.Here 的例子(文件应该有 .bat
扩展名):
@break #^
=begin
@echo off
echo BATCH: Hello world!
ruby "%~f0" %*
exit /b 0
=end
puts 'RUBY: Hello world!'
输出将是:
BATCH: Hello world!
RUBY: Hello world!
这里是解释。
对于 Ruby @break #^
将声明一个实例变量 break 并将以 comment.On 结束该行,下一行将开始一个多行注释,批处理代码将是放置.
另一方面,Cmd.exe 将静默执行 break 命令(因为如果使用 @ 符号)并且因为 break 命令什么也不做(它和旧的 dos 命令仅用于向后兼容)它将没有effect.The 结尾的carret(它批量转义特殊符号)将转义新行,前两行将被占用。批处理部分完成后,我们可以关闭 Ruby 评论并放置代码。
Here 可以看到更多的批量嵌入代码示例(Python、PHP 等等)。
这是另一个 hack,恕我直言,它更容易理解,因为它不依赖于行继续、块级注释和仅用于向后兼容的 CMD 语句。
最主要的是,bat 文件还必须是语法上有效的 ruby 文件。
在这个 ruby 文件中,我们需要嵌入 CMD 语法。为此,我们需要创建一个对 ruby:
透明的代码岛
- @rem创建一个ruby变量@rem,偶尔是bat中的注释语句。该行被忽略,但允许在 ruby 文件中打开一个蝙蝠代码岛。
- exit /b 0 终止command.com
解析的部分
.
@rem = %Q{
@echo off
echo BATCH: Hello world!
ruby "%~f0" %*
exit /b %ERRORLEVEL%
}
# ruby code starts here
puts %Q{RUBY: Hello world! #{ARGV}}
通常这对于“自调用”脚本很有用 notorious example
带有嵌入式代码的好脚本不应该使用丑陋的转义序列、没有临时文件和冗余输出。 可以用 Ruby 来完成吗?
是的,有一些 hacks.Here 的例子(文件应该有 .bat
扩展名):
@break #^
=begin
@echo off
echo BATCH: Hello world!
ruby "%~f0" %*
exit /b 0
=end
puts 'RUBY: Hello world!'
输出将是:
BATCH: Hello world!
RUBY: Hello world!
这里是解释。
对于 Ruby @break #^
将声明一个实例变量 break 并将以 comment.On 结束该行,下一行将开始一个多行注释,批处理代码将是放置.
Cmd.exe 将静默执行 break 命令(因为如果使用 @ 符号)并且因为 break 命令什么也不做(它和旧的 dos 命令仅用于向后兼容)它将没有effect.The 结尾的carret(它批量转义特殊符号)将转义新行,前两行将被占用。批处理部分完成后,我们可以关闭 Ruby 评论并放置代码。
Here 可以看到更多的批量嵌入代码示例(Python、PHP 等等)。
这是另一个 hack,恕我直言,它更容易理解,因为它不依赖于行继续、块级注释和仅用于向后兼容的 CMD 语句。
最主要的是,bat 文件还必须是语法上有效的 ruby 文件。 在这个 ruby 文件中,我们需要嵌入 CMD 语法。为此,我们需要创建一个对 ruby:
透明的代码岛- @rem创建一个ruby变量@rem,偶尔是bat中的注释语句。该行被忽略,但允许在 ruby 文件中打开一个蝙蝠代码岛。
- exit /b 0 终止command.com 解析的部分
.
@rem = %Q{
@echo off
echo BATCH: Hello world!
ruby "%~f0" %*
exit /b %ERRORLEVEL%
}
# ruby code starts here
puts %Q{RUBY: Hello world! #{ARGV}}