Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^3: [implementation specific to windows] writing a proper batch file for terminal start-up

by harangzsolt33 (Pilgrim)
on Oct 19, 2019 at 06:17 UTC ( #11107683=note: print w/replies, xml ) Need Help??


in reply to Re^2: [implementation specific to windows] writing a proper batch file for terminal start-up
in thread [implementation specific to windows] writing a proper batch file for terminal start-up

"Right now, when I click on a .pl, a dos terminal with strawberry perl exe on the top appears, executes the program and then disappears before I can lay eyes on it."

Yes, see, that's why I associated the .pl files with a bat file. Here's how to do it:

* On Windows XP, you would right-click on any .pl file, and go to "Open With..." and click on "Choose Program..." and then "Browse." Then find the bat file and put a checkmark next to "Always use the selected program to open this kind of file" and click on OK.

* On Windows 7, right-click on any .pl file, and go to "Open With..." and click on "Choose default program..." Then click on "Browse" and find the bat file and put a checkmark next to "Always use the selected program to open this kind of file" and click OK.

* On Windows 10, you have to right-click on any .pl file, and click on "Open With" and then "Choose another app" and then in the new window click "More Apps" and then scroll down and click on "Look for anther app on this PC." and then find that bat file, and put a checkmark next to "Always use this app to open .pl files." and click on OK.

The REG file changes the icon that appears next to .pl files. You can ignore that. That just changes the look and feel. If you do decide to use a custom icon for pl files, you have to get the icon file first, then edit the reg file. Make sure the paths are correct. Double-click on the reg file... and then associate the pl file with the bat file. That should be the last thing.

But you have to have the bat file ready first. I would just call it run.bat to make it short, and in your case it may look like this:

@ECHO OFF set TERM= set PERL_JSON_BACKEND= set PERL_YAML_BACKEND= set PERL5LIB= set PERL5OPT= set PERL_MM_OPT= set PERL_MB_OPT= C:\Strawberry\perl\bin\perl.exe -I C:\Strawberry\Perl\lib "%1" %2 %3 ECHO. PAUSE

Explanation: I am not sure why you have to set all those various environmental variables in the beginning, but I am assuming that they are necessary for something. So, we clear those values first. Then we call C:\Strawberry\perl\bin\perl.exe by giving its exact location. If you say you want to run the perl.exe which is located in the folder "C:\Strawberry\perl\bin" then you can be sure that that's the version of perl that will run! Especially if you also specify the location of the lib folder, you'll definitely get that perl running, and not something else. The %1 and %2 and %3 in the command line are the arguments. The first argument is the file name which is going to be %1. And then if you pass two more arguments to your perl program, then those would be %2 and %3. You could add %4 and %5 %6 %7 %8 %9 to make a full list.

So, let's say you're in command prompt, and you enter:

C:\Strawberry\perl>run.bat example.pl Hello World

In this case, your run.bat program runs the perl program and passes two arguments "Hello" and "World" so "Hello" becomes %2 and "World" becomes %3. Your perl program will receive those arguments. On the other hand, if you omit %2 %3 %4 etc... then your perl program won't receive any arguments even if you do try to pass some arguments.

The bat file is a pretty simple program. You could try and omit all those lines that start with "set" and see what happens. I think, those are totally unnecessary, but I could be wrong.

You could insert these two lines however:

SET PATH=C:\Strawberry\perl\site\bin;%PATH%
SET PATH=C:\Strawberry\perl\bin;%PATH%

These two lines add the strawberry bin folder to the path, so if perl or your program calls any executable that may be located in Strawberry/perl/bin, then those programs get executed.

Your path may already contain some references to other perl versions on your computer, so you could simply change the PATH instead of adding to it:

SET PATH=C:\WINDOWS;WINDOWS\SYSTEM32;C:\Strawberry\Perl\bin;

That's all you have to do, and it should work.

Okay. I am not sure what this is what you wrote:

"C:\Strawberry> Ftype Perl_program_file="C:\Strawberry\perl\bin\perl +.exe" %1 Ftype : The term 'Ftype' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1 + Ftype Perl_program_file="C:\Strawberry\perl\bin\perl.exe" %1"

If you're in the terminal window staring at command prompt, then you would run a perl script by entering the following command:

C:\Users\tblaz\Desktop>C:\Strawberry\perl\run example.pl

OR you could just enter:

C:\Users\tblaz\Desktop>run example.pl

This will work if you have added "C:\Strawberry\perl" to your system PATH. If you haven't yet, then go to Control Panel >> System >> Advanced >> Environment Variables. and find the Path string and update it by adding "C:\Strawberry\perl" to the end of the long string. Separate each path with a semi-colon ; So, your path string will probably look something like this :

Path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Strawberry\Perl;

  • Comment on Re^3: [implementation specific to windows] writing a proper batch file for terminal start-up
  • Select or Download Code

Replies are listed 'Best First'.
Re^4: [implementation specific to windows] writing a proper batch file for terminal start-up
by Aldebaran (Chaplain) on Oct 22, 2019 at 02:42 UTC
    * On Windows 10, you have to right-click on any .pl file, and click on "Open With" and then "Choose another app" and then in the new window click "More Apps" and then scroll down and click on "Look for anther app on this PC." and then find that bat file, and put a checkmark next to "Always use this app to open .pl files." and click on OK.

    I'm not finding this functionality. I either get to open this with an existing app or one that MS is gonna sell me.

    It took me a while to realize that there is no run command in neither dos nor bash:

    C:\Users\tblaz\Documents\evelyn>run 8.monk.tag 'run' is not recognized as an internal or external command, operable program or batch file. C:\Users\tblaz\Documents\evelyn>
    tblaz@LAPTOP-ECV9SQTM MINGW64 ~/Documents/evelyn $ run anything bash: run: command not found tblaz@LAPTOP-ECV9SQTM MINGW64 ~/Documents/evelyn $

    When you suggest syntax like this:

    C:\Users\tblaz\Desktop>run example.pl

    , it is because you have a run.bat in the path. I have a nomenclature where I prefer to put a numeral first on any file I can. I copied the idea tho and have this:

    C:\Strawberry\perl\site\bin>type 2.run.bat @ECHO OFF rem set env variables set TERM=dumb set PERL_JSON_BACKEND=JSON::XS set PERL_YAML_BACKEND=YAML rem avoid collisions with other perl stuff on your system rem set PERL5LIB= set PERL5OPT= set PERL_MM_OPT= set PERL_MB_OPT= rem change encoding to show cyrillic chars chcp 65001 rem show which perl perl -e "printf("""Perl executable: %%s\nPerl version : %%vd\n""", $ +^X, $^V)" 2>nul if ERRORLEVEL==1 echo.&echo FATAL ERROR: 'perl' does not work; check i +f your strawberry pack is complete! C:\Strawberry\perl\bin\perl.exe "%1" %2 %3 ECHO. PAUSE cmd \K C:\Strawberry\perl\site\bin>

    Changing the active code page is a definite plus. Now, instantiated back where my perl scripts are:

    C:\Users\tblaz\Documents\evelyn>2.run.bat 2.cyr.pl Active code page: 65001 Perl executable: C:\Strawberry\perl\bin\perl.exe Perl version : 5.30.0 ... Content-Type: text/html; charset=utf-8 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Мой тест</title> </head> <body> Бакс2811 </body> </html> Press any key to continue . . .

    I'm happy with the results. There was nothing in this directory before today, so I think it's a fine place for such scripts. (?)

    Directory of C:\Strawberry\perl\site\bin 10/21/2019 04:00 PM <DIR> . 10/21/2019 04:00 PM <DIR> .. 10/21/2019 12:56 PM 71 1.run.bat 10/21/2019 04:15 PM 581 2.run.bat 2 File(s) 652 bytes 2 Dir(s) 453,237,977,088 bytes free

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11107683]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (5)
As of 2019-11-19 07:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Strict and warnings: which comes first?



    Results (94 votes). Check out past polls.

    Notices?