I have a which.bat on Windows 7,
@echo off
REM This bat searches a file in PATH list to see whether a file can be found.
REM If found, it shows the file's full path.
REM which.bat gcc.exe
REM shows
REM gcc.exe is found: D:\GMU\MinGW2\bin\gcc.exe
REM
REM Note: Filename extension is significant in the search. E.g. If you run
REM which.bat gcc
REM gcc.exe will not be matched.
IF "%1" == "" goto END
IF "%~$PATH:1" == "" (
echo %1 is not found in any directories from PATH env-var.
) ELSE (
echo %1 is found: %~$PATH:1
)
:END
This bat works well until I find a strange behavior today.
There is a file O:\temp\pfiles (x86)\mystuff.txt
, and PATH has content:
PATH=O:\temp\pfiles (x86);D:\CmdUtils
Running which mystuff.txt
, I got the VERY STRANGE output:
\mystuff.txt was unexpected at this time.
After some poking around, I find that the (x86)
in directory name causes the problem. To workaround, I have to add quotes to the echo
, like this:
echo %1 is found: "%~$PATH:1"
The downside of such tweak is obvious: The quotes are printed to screen which is not always desired in the programmer's opinion.
Can anyone help explain this strange behavior?
I find this problem because in my real env, I have some paths like C:\Program Files (x86)\Common Files\NetSarang
in PATH, which exhibit exactly the same symptom.