Windows 突然之间,perl脚本不再';除非我在它们前面加上“I”字,否则它们不会工作;perl";并给出脚本的完整路径

Windows 突然之间,perl脚本不再';除非我在它们前面加上“I”字,否则它们不会工作;perl";并给出脚本的完整路径,windows,perl,command-line,prefix,strawberry-perl,Windows,Perl,Command Line,Prefix,Strawberry Perl,我一直在使用自己的个人环境,这种环境已经持续工作了20多年。大约14年前,我开始合并许多perl脚本。 我已经使用了22年相同的命令行解释器树(NDOS->4DOS->4NT->TCMD,实际上都是相同的程序) 我刚刚从ActiveState windows perl切换到草莓perl 多年来,运行perl脚本所需的就是这些: SET .pl=perl 这就是您指定要使用哪个程序打开内容的方式 我可以简单地做到: c:\>test.pl Hello, world! 一切都很顺利。永远

我一直在使用自己的个人环境,这种环境已经持续工作了20多年。大约14年前,我开始合并许多perl脚本。 我已经使用了22年相同的命令行解释器树(NDOS->4DOS->4NT->TCMD,实际上都是相同的程序)

我刚刚从ActiveState windows perl切换到草莓perl

多年来,运行perl脚本所需的就是这些:

SET .pl=perl
这就是您指定要使用哪个程序打开内容的方式

我可以简单地做到:

c:\>test.pl
Hello, world!
一切都很顺利。永远

今天,在一周前的操作系统中,一切都停止了

Perl脚本将运行,但不会执行任何操作。没有错误。没有输出。没什么

它工作的唯一方法是在脚本前面加上“perl”(在这种情况下,不会搜索我的路径,因为脚本名称现在是一个参数,所以我必须填写脚本的完整路径)

以下是我的感受:

C:\>test.pl

C:\>perl test.pl 
Can't open perl script "test.pl": No such file or directory

C:\>perl c:\bat\test.pl 
Hello, world!
请注意,昨天,甚至今天早些时候,这一切都很顺利。我不知道是什么改变了这一点,也不知道是什么打破了这一点,我已经观察了相当长的时间,发现了类似但不完全相同的问题——并且没有任何修复方法起到帮助作用

我有一船剧本。我真的很不愿意在它们之前插入“perl”,然后限定完整的路径

实际上,我可能必须编写一个perl.bat包装器,将参数文件名转换为完全限定路径,并显式调用perl

我真的不想那样做。这是一个禁止援助的解决方案。我想了解什么是错误的,地址是什么,并解决它


我开始讨厌Windows 7…

我想你的问题很可能是与.pl和perl.exe的关联被破坏了

查看注册表中的HKEY\u CLASSES\u ROOT\.pl,它下面可能有Perl(或者说FOO)子节点

现在看看HKEY\U CLASSES\U ROOT\Perl或FOO(如果是这样的话)

它应该有一个shell\Open\command

应该是这样的

  "C:\Perl\bin\perl.exe" "%1" %*
当然,系统上的perl.exe路径可能不同。%*是将传递给脚本的参数传递给perl.exe的重要位

因此,当您在命令窗口中执行“test.plfoobar”时,幕后的shell实际上正在调用

C:\perlpath\perl.exe C:\scriptpath\test.pl foo bar.
当您在windows资源管理器中选择一个*.pl文件并尝试将其与perl.exe关联时,就会出现这种问题


另外,如果您将.PL添加到PATHEXT环境变量中,您甚至不必指定test.PL。如果test.PL位于路径的第一位,test将调用test.PL:)

您可以通过右键单击
.PL
文件来检查文件扩展名关联,选择
属性
,然后单击“打开方式”按钮(这是XP,我不知道它在Windows 7中的外观)。可能是您的扩展指向了错误的位置。

Windows Powershell

在Windows Powershell中,将.PL添加到PATHEXT环境变量(否则脚本将在单独的CMD窗口中运行)

但是,Powershell不会运行命令,除非它们位于PATH中(即默认情况下,“.”不在$env:PATH中,有点像Unix上的root)

所以,运行一个脚本

./script 
./script.pl
最简单的方法是使用Powershell配置文件

e、 g.在C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell\u profile.ps1中

$env:PATH   = "C:\strawberry\perl\bin;$env:PATH"
$env:PATHEXT    = "$env:PATHEXT;.PL"
如果您不想这样做。/(请注意,这是一种安全风险),请在路径中添加“.”(不带引号)

那你就做吧

script
我认为检查文件关联的命令行是通过“assoc”命令。在我的Windows机器上键入
assoc.pl
会产生
”.pl=“
”,这意味着我的.pl文件与Perl没有关联。祝你好运!
script