1
Running Windows 8.1. This worked a few days ago. Really do not know what has changed, nor am I aware of any update that might have stopped this working.
When I run a .bat (batch) file (right-click > Open
or double-click
) the batch file is displayed in Notepad++ and does NOT run. If I load a command prompt and manually run the .bat file from inside the command prompt, the batch file runs perfectly.
I've carefully checked these two articles:
How do I restore .bat files association with the system (make them run when double-clicked)? https://stackoverflow.com/questions/4905708
and nothing makes a difference. Specifically:
From a command prompt:
assoc .bat
returns.bat=batfile
ftype batfile
returnsbatfile="%1" %*
After everything I've tried, the PC has been rebooted with no difference. This is driving me crazy...why won't batch files run any more?
4I would assume the .bat extension is no longer linked to the command prompt, and notepad++ may open any textfile by default. If you rename the .bat file to .cmd, does it work? If so, look into how the .cmd is setup and restore that for the .bat filetype as well. – LPChip – 2019-03-18T20:59:06.487
What do you have for
assoc .cmd
? Useassoc .cmd=batfile
if required (in an elevated CMD). – harrymc – 2019-03-18T21:00:08.590also, running those commands on my system gives me the same results. I would say the problem lies somewhere else. – LPChip – 2019-03-18T21:02:47.337
1@LPChip: Good test! I renamed the
.bat
file to.cmd
and it worked!From the command line I typed
assoc .cmd
and.cdm=cmdfile
was returned.Am now in the process and work out what the differences are between
HKEY_CLASSES_ROOT\batfile
andHKEY_CLASSES_ROOT\cmdfile
.Weird thought, but will all my batch files work if rename them from
.bat
to.cmd
? – AlainD – 2019-03-18T21:16:45.430Yes, you can rename a .bat to .cmd and it will work. .bat files are executed slightly differently than .cmd but in 99% of the cases you will never have to deal with this. .bat is basically using some logic from back in the windows 16bit days, where cmd is not. .cmd is mostly backwards compatible though, but it are small nuances that are different. Its worth fixing though, its cmd that knows by extension what execution type to use so all you have to do is getting .bat open with .cmd again. – LPChip – 2019-03-18T21:24:11.447
1Also, in the registry under HK_CR, look for the .bat and .cmd too. Especially for subfolders rather than associations – LPChip – 2019-03-18T21:25:48.520
@LPChip: Thanks. I've now made exactly one change to
[HKEY_CLASSES_ROOT\batfile\shell\Open\command]
. This was to change the value from@="\"C:\\Windows\\System32\\cmd.exe\" \"%1\""
to@="\"%1\" %*"
. Batch files now work...which is great but I'm beginning to doubt my sanity. I could have sworn that I checked this and tried that exact same registry setting as I was going round the loop! It feels like there are some hidden Windows settings here... – AlainD – 2019-03-18T21:35:25.660It looks like this was solved in the comments. Another cause is when "Hide extensions for known file types" is checked in Windows Explorer Folder Options, and the real extension for a file is hidden, but a fake one is visible. That is, myfile.txt showing, but myfile.txt.exe is the real name of the file. This technique is used for malware. In your case, it's reversed, so that yourfile.exe is really yourfile.exe.txt and thus opens in the text editor. – Christopher Hostage – 2019-03-18T21:39:37.593
1@ChristopherHostage: That is not the case here. Hiding file extensions is off and the files in question were definitely
.bat
files. Am curious why Microsoft even have aHide file extensions
option. Why would it be sensible to allow the user to accidentally runDoSomething.txt.exe
? Its just a recipe for accidental errors or security risks. Should never be an option - the full filename with extension should be displayed. – AlainD – 2019-03-18T21:46:03.340