Batch script does not recognize Windows environment variable [duplicate] - windows

This question already has answers here:
Windows Batch error: "'ping' is not recognized as an internal or external command operable program or batch file."
(3 answers)
Closed 6 years ago.
I have batch script like this, let's say test.bat. What it does is: cd into a directory path, and apply "make" commands:
set path=%SRC_PATH%
echo %path%
cd /d %path%
make clean
make all
When I run test.bat from a Windows Command Shell, I get following error despite I defined path to make.exe in Windows Environment Variable
'make.exe' is not recognized as an internal or external command,
operable program or batch file.
Note, I do not see this issue, when I use Windows command line and entered all the commands manually. Issue is only when I put the commands into a batch file.
Any pointers would be appreciated.
thanks.

You dont need to write this
set path=%SRC_PATH%
echo %path%
cd /d %path%
Just enter the path of make.exe in PATH Variable in environment variables..
PATH Variable already carries value so just add semi colon to the end enter the full folder path of make.exe(JUST FOLDER PATH)
now just calling make will work.

Related

Call mvnw.cmd from a .bat file [duplicate]

This question already has answers here:
What is the reason for "X is not recognized as an internal or external command, operable program or batch file"?
(4 answers)
Closed 2 years ago.
I am creating a container in docker using the below command.I need to use the below command from a .bat file when I execute the command from the command line it runs but does not work with the batch file.What am I doing wrong here.
Batch File
call mvnw.cmd spring-boot:build-image -Dspring-boot.build-image.imageName=service
Error:
'mvnw.cmd' is not recognized as an internal or external command,operable program or batch file.
Windows does not know where the mvnw.cmd is, either use an environment variable, with relative path, or use an absolute path, or navigate to the directory, before running the command.

How to make a batch script to execute from anywhere?

I would like to run my batch script from anywhere, for example:
C:\>test123
And that command line executes my batch script C:\Documents\test123.bat.
I tried to do it with environment variable path, but it doesn't seem to work.
Add your bat to PATH and make sure PATHEXT contains .BAT
How to add your program to the PATH env variable
Note, that the current working directory will be whereever you called it from.
If you want relative paths to where the bat is stored, use %~dp0
Please post the output of echo %PATHEXT% %PATH% and tell us the exact location of your bat file and more error info why it failed in your case?
Adding to C:\Windows\System32
Worked for Me.
System info:
Windows 10 with Admin access.

Absolute path needed in batch file? [duplicate]

This question already has answers here:
What is the reason for "X is not recognized as an internal or external command, operable program or batch file"?
(4 answers)
What does %~dp0 mean, and how does it work?
(7 answers)
What is the reason for batch file path referenced with %~dp0 sometimes changes on changing directory?
(6 answers)
Closed 4 years ago.
I have a Windows batch file that calls the python interpreter:
python -m ...
That works. But now I have a second batch file that calls the first batch file. When I run this batch file, I get an error:
'python' is not recognized as an internal or external command,
operable program or batch file.
I don't understand why the second batch file doesn't work.
If it helps to have a concrete example, here's one:
In helloworld.py
print("Hello, world!")
In batch1.cmd
#echo off
echo About to call python...
python -m helloworld
pause
exit
In batch2.cmd
#echo off
set "path=%~dp0batch1.cmd"
start "" %path%
Output:
About to call python
'python' is not recognized as an internal or external command, operable program or batch file.
Press any key to continue . . .
You are completely breaking the system variable %path% by setting it in the batch. Now your system cannot find python anymore.
Simply change second batch to:
#echo off
set "mypath=%~dp0batch1.cmd"
start "" %mypath%
To explain the %path% variable better. It holds the path to any possible file locations to search for files to execute or open without the need to have the full path specified each time by a user. By running a command in cmd like python, it first checks the current directory where the batch started in, if python.exe is not there, it will search each semicolon seperated path in the %path% variable. When you set a new %path% variable it only knows of the newly set path and cannot find python to execute and you get the most common cmdline error on windows.
On another note, if you want to start batch1 in the same window, perhaps consider calling batch instead of starting it
call "%mypath%"

starting a bat script from bash under windows

I am trying to start a .bat file from gow bash. I can sucessfully start a batch and return to bash with the following (I am in C:\tmp\a\ directory), the content of the file a.bat file consists a single command cd (to print the current working directory):
$ cat a.bat
cd
$ cmd "/C a.bat"
c:\tmp\a>cd
c:\tmp\a
$
Now if I try to start the program from c:\tmp (one level higher in the hierarchy of directory structure), I get an error:
$ cmd "/C a\\a.bat"
'a' is not recognized as an internal or external command,
operable program or batch file.
$ cmd '/C a\a.bat'
'a' is not recognized as an internal or external command,
operable program or batch file.
$ cmd '/C a/a.bat'
'a' is not recognized as an internal or external command,
operable program or batch file.
How can I start a batch script given a path to it, and return to bash?
I guess I found a very simple solution:
Add a dot before /C
cmd ". /C a\a.cmd"
After that gow (and cygwin and alikes) stop treating the argument as containing paths and converting it to POSIX paths.
And cmd ignores everything up to /C (well, almost everything, I think).
a.cmd:
#echo off
echo it's working
output:
bash-3.1$ cmd ". /C a\a.cmd"
it's working
bash-3.1$
[Update]
After some research I found that POSIX path conversion has a very clean description of conversion rules.
In your case the rule An argument with a leading / is converted up to the first /.. seems to be applied.
Conversion results in changing '\' to '/'. So, you get a/a.cmd, that is a with a switch /a.cmd. And this results in the observed error, of course.
The link above addresses MSYS and seems to be a bit outdated, but I've checked some of the rules in bash from my fresh Git for Windows installation (based on MSYS2), and they look working as described.
After a bit of research and posting questions to other forums I found the following additional info to run the job "correctly":
cmd //D . //C "a\a.cmd"
References:
Github issue #244, Unix to Windows path translation may corrupt command switches/arguments
Github issue #243, when bash starts a cmd, it adds a buggy double quote symbol at the end of the line

'fc' is not recognized as an internal or external command, operable program or batch file

Even running as an administrator, it seems only to work when I'm in the folder: C:\Windows\System32\
Any advice on how to make it work from anywhere in the C:\ directory ?
Your PATH statement is fubar.
It should include at least these things assuming windows in in c:\windows
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
You can set/update your path with this command:
SETX PATH "%PATH%;c:\windows\system32"
Or add the /M if you run an elevated prompt to set it systemwide for all users
To see the effect of this change you have start a new command prompt.
If you only want to update the path in your current command prompt do:
SET PATH=%PATH%;c:\windows\system32
To examine your current PATH environment var type
SET PATH
at the command prompt. To spare 4 keystrokes you can also leave out SET

Resources