我编写了一些Ruby代码来检查ZIP文件,作为内部公司流程的一部分。我们通常启动此代码的方式来自Web浏览器。单击下载文件时,选择“打开方式”并指定小批处理文件的完整路径。这个单行批处理文件如下所示:
\\mathworks\public\Matthew_Simoneau\ruby-1.8.7-p72-i386-mswin32\bin\ruby.exe "%~dp0inspect.rb" %1
据我所知,这种技术是在没有安装Ruby但可以访问公司内部文件系统的Windows机器上启动我的Ruby代码的唯一简单方法。
当ZIP文件的文件名包含&符号时,我遇到了问题。
这适用于IE和Chrome,上面的行被“扩展”为以下内容:
C:\WINNT\Profiles\matthew\Desktop>\\mathworks\public\Matthew_Simoneau\ruby-1.8.7-p72-i386-mswin32\bin\ruby.exe "\\mathworks\public\Matthew_Simoneau\sandbox\inspect\inspect.rb" "C:\WINNT\Profiles\matthew\Local Settings\Temporary Internet Files\Content.IE5\VNATJ3X0\park&park_paper_LMI_neuralN[1].zip"
但是,在Firefox上,文件名中&符号后面的所有内容都被丢弃在地板上:
H:\>\\mathworks\public\Matthew_Simoneau\ruby-1.8.7-p72-i386-mswin32\bin\ruby.exe "\\mathworks\public\Matthew_Simoneau\sandbox\inspect\inspect.rb" C:\Temp\park
我已尝试将%1
放在批处理文件的引号中,但这没有效果。
我怀疑这是Firefox中的一个错误。我搜索了Firefox错误列表,但没有找到任何内容。
我在这里做错了吗?这是Firefox的错误吗?如果是这样,有没有办法解决它?是否有更强大的方法从Web浏览器启动我的Ruby代码?
更新:我向Bugzilla @ Mozilla提交了a bug report,但还没有回复。
答案 0 :(得分:1)
我刚刚在Linux上测试了与Firefox 3.5.2类似的东西,它运行良好(即shell脚本获取正确的路径)。
您应该首先尝试使用这样的脚本:
echo %1 > c:\temp\test.txt
(希望这是正确的语法,我很长时间没有使用cmd)
...看看你是否在该文件中找到正确的路径。如果&符号在该文件中被删除,并且您使用的是最新版本的Firefox,则意味着您发现了Windows平台特有的错误,您应该报告它。
答案 1 :(得分:1)
由于您显然无法控制zip文件名,因此您可以在Ruby代码中执行以下 ...
如果传递的文件名不存在,请在同一文件夹中查找基本传递文件名后跟“& * .zip”的任何文件。
这将适用于“park& park.zip”,只要在名为“park& foo.zip”的文件夹中还没有zip文件。
如果存在文件名冲突的真实可能性(即,没有从用户的计算机上清除拉链并且&符号很常见),唯一的其他解决方案可能是在Firefox中使用具有文件名的下载管理器插件重写能力,以便在下降过程中修复任何&符号。
答案 2 :(得分:0)
使用%24作为&字符。有关其他此类有问题的字符,请参阅URL编码表:http://webdesign.about.com/library/bl_url_encoding_table.htm
答案 3 :(得分:-1)
对您的&符号进行编码以获得最佳效果......
&
在
中C:\WINNT\Profiles\matthew\Desktop>\\mathworks\public\Matthew_Simoneau\ruby-1.8.7-p72-i386-mswin32\bin\ruby.exe "\\mathworks\public\Matthew_Simoneau\sandbox\inspect\inspect.rb" "C:\WINNT\Profiles\matthew\Local Settings\Temporary Internet Files\Content.IE5\VNATJ3X0\park&park_paper_LMI_neuralN[1].zip"