How do I make Perl scripts recognize parameters in the Win32 cmd console?

后端 未结 9 1238
时光说笑
时光说笑 2020-12-03 12:46

When I invoke my Perl scripts in the Windows environment without invoking perl first, the parameters are not passed to my script.

For example,



        
9条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-03 13:20

    Hmmm... sounds like the file association for *.pl is messed up somehow. I'm not on a Windows box, so I can't test this. You can check the file association stuff with either the ASSOC or FTYPE command on the command-line. IIRC, "ASSOC .pl" should tell you what the file type is and "FTYPE filetype command" tells the shell what to do with a Perl script. Try something like:

    C:\> ASSOC .pl=perlscript
    C:\> FTYPE perlscript=C:\Perl\bin\perl.exe %1 %*
    

    From the looks of one of the command references that should do the trick. My guess is that the current association is not passing the parameters along to the script. You should be able to check that by using ASSOC .pl to figure out what the name of the file association is and then using FTYPE to print out the command that the shell is going to execute.

    Update

    I found an interesting thing that I want to note for posterity. I started seeing exactly this problem on a friends machine at work with respect to some Python scripts. ASSOC and FTYPE resulted in the expected output but the parameters were still not being passed along - exactly what was originally reported.

    After a little digging, I found that the registry settings were created somewhere along the line as REG_SZ values. I deleted them and re-created them using ASSOC and FTYPE and everything started working... looking at the registry gave me the answer the new values were created as REG_EXPAND_SZ! These worked exactly as expected.

提交回复
热议问题