Reputation: 57252
I suppose this is a strange question . but I'm curious.This is what I've tried so far:
I've exported and compare values from [HKEY_CLASSES_ROOT\batfile]
,[HKEY_CLASSES_ROOT\cmdfile]
,[HKEY_CLASSES_ROOT\.bat]
,[HKEY_CLASSES_ROOT\.cmd]
. The only differences I've noticed were in HKEY_CLASSES_ROOT\*\FrienflyTypeName
which suppose is not crucial for their execution.So I've created an registry values with same data for desired extension(I'm trying to create .scjs file extension ):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.scjs]
@="scjsfile"
#this says that the file will contains text
[HKEY_CLASSES_ROOT\.scjs\PersistentHandler]
@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"
[HKEY_CLASSES_ROOT\scjsfile]
@="Windows Batch File"
"EditFlags"=hex:30,04,00,00
"FriendlyTypeName"=hex(2):40,00,25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,\
00,6f,00,6f,00,74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,\
32,00,5c,00,61,00,63,00,70,00,70,00,61,00,67,00,65,00,2e,00,64,00,6c,00,6c,\
00,2c,00,2d,00,36,00,30,00,30,00,32,00,00,00
[HKEY_CLASSES_ROOT\scjsfile\DefaultIcon]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,69,00,6d,00,\
61,00,67,00,65,00,72,00,65,00,73,00,2e,00,64,00,6c,00,6c,00,2c,00,2d,00,36,\
00,38,00,00,00
[HKEY_CLASSES_ROOT\scjsfile\shell]
[HKEY_CLASSES_ROOT\scjsfile\shell\edit]
[HKEY_CLASSES_ROOT\scjsfile\shell\edit\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\
00
#copied from batfile from HKEY_CLASSES_ROOT .Same as cmdfile reg values
[HKEY_CLASSES_ROOT\scjsfile\shell\open]
"EditFlags"=hex:00,00,00,00
[HKEY_CLASSES_ROOT\scjsfile\shell\open\command]
@="\"%1\" %*"
[HKEY_CLASSES_ROOT\scjsfile\shell\print]
[HKEY_CLASSES_ROOT\scjsfile\shell\print\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,2f,00,70,00,20,\
00,25,00,31,00,00,00
[HKEY_CLASSES_ROOT\scjsfile\shell\runas]
"HasLUAShield"=""
[HKEY_CLASSES_ROOT\scjsfile\shell\runas\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,63,00,6d,00,\
64,00,2e,00,65,00,78,00,65,00,20,00,2f,00,43,00,20,00,22,00,25,00,31,00,22,\
00,20,00,25,00,2a,00,00,00
[HKEY_CLASSES_ROOT\scjsfile\shell\runasuser]
@="@shell32.dll,-50944"
"Extended"=""
"SuppressionPolicyEx"="{F211AA05-D4DF-4370-A2A0-9F19C09756A7}"
[HKEY_CLASSES_ROOT\scjsfile\shell\runasuser\command]
"DelegateExecute"="{ea72d00e-4960-42fa-ba92-7792a7944c1d}"
[HKEY_CLASSES_ROOT\scjsfile\ShellEx]
[HKEY_CLASSES_ROOT\scjsfile\ShellEx\ContextMenuHandlers]
@="Compatibility"
[HKEY_CLASSES_ROOT\scjsfile\ShellEx\ContextMenuHandlers\Compatibility]
@="{1d27f844-3a1f-4410-85ac-14651078412d}"
[HKEY_CLASSES_ROOT\scjsfile\ShellEx\ContextMenuHandlers\OpenGLShExt]
@="{E97DEC16-A50D-49bb-AE24-CF682282E08D}"
[HKEY_CLASSES_ROOT\scjsfile\ShellEx\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"
[HKEY_CLASSES_ROOT\scjsfile\ShellEx\PropertySheetHandlers]
[HKEY_CLASSES_ROOT\scjsfile\ShellEx\PropertySheetHandlers\ShimLayer Property Page]
@="{513D916F-2A8E-4F51-AEAB-0CBC76FB1AF8}"
[HKEY_CLASSES_ROOT\scjsfile\ShellEx\{8895b1c6-b41f-4c1c-a562-0d564250836f}]
@="{1531d583-8375-4d3f-b5fb-d23bbd169f22}"
Also I've added the value (.SCJS) to the PATEXT variable -> .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.SCJS
but when I run the file I get : test.scjs is not valid Win32 application.Access is denied.
So it is even possible?Is there something else I should change?
EDIT : the best solution I've found: for open key I use:
[HKEY_CLASSES_ROOT\scjsfile\shell\open\command]
@="%SystemRoot%\\System32\\caller.bat \"%1\" \"%*\""
where I have caller.bat in system32:
@echo off
copy "%~nx1" "%temp%\%~nx1.bat" /Y >nul
"%temp%\%~nx1" .bat %~2
wish simply cmd /c
it's harder to manage the arguments.Looks at the moment there's no way to handle command line arguments.
ONE MORE EDIT: The one way to handle the command line arguments is to use [HKEY_CLASSES_ROOT\scjsfile\shell\open\Run]
instead of [HKEY_CLASSES_ROOT\scjsfile\shell\open\command]
.I don't know what exactly is the difference right now , but it works (I saw this from my AutoIT installation :-) ).
Upvotes: 4
Views: 1969
Reputation: 57252
First need an "installation" script :
@echo off
rem :: A files with .TEST extension will be able to execute batch code but is not perfect as the %0 argument is lost
rem :: "installing" a caller.
if not exist "c:\caller.bat" (
echo @echo off
echo copy "%%~nx1" "%%temp%%\%%~nx1.bat" /Y ^>nul
echo "%%temp%%\%%~nx1.bat" %%*
) > c:\caller.bat
rem :: associating file extension
assoc .test=batps
ftype batps=c:\caller "%%1" %%*
then we can try a simple .test
file:
@echo off
for /l (1;1;10) do (
echo testing .TEST extension
)
ASSOC
and FTYPE
both have immediate effect so we can start a .test
file right after "installation" and there's no need of second cmd instance.
Upvotes: 1
Reputation: 31221
Although this has already been accepted I thought I would add in my answer that I hacked together.
I created my own file extension .bali
in which I can put some batch commands and run them by opening the file.
The .bali
registry export looks like this
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.bali]
@="BaliFile"
Note that this value can't have spaces (might work if it's quoted, but didn't try it).
The balifile
registry export look like this
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\balifile]
[HKEY_CLASSES_ROOT\balifile\DefaultIcon]
@="%SystemRoot%\\System32\\imageres.dll,-68"
[HKEY_CLASSES_ROOT\balifile\shell]
[HKEY_CLASSES_ROOT\balifile\shell\open]
[HKEY_CLASSES_ROOT\balifile\shell\open\command]
@="cmd.exe /c for /f \"delims=\" %%a in (%1) do %%a"
My file.bali
looks like this
echo hello bali
pause
The file will have the cmd icon as well, and when it is run it will run the commands in the prompt, obviously outputting hello bali
.
This is limited as to what you can use, you can't for example use variables, but you can experiment with it yourself to find out what you can and can't do.
Not sure if this is what you are looking for, but it was quite fun to make anyways :)
Upvotes: 2
Reputation: 130819
This same question was asked previously, but I can't find it.
The consensus was that it is impossible - Windows will not allow execution of batch files that do not have an extension of .bat or .cmd
I remember one poster mentioned the security loop hole that would be created if it were allowed.
Upvotes: 1
Reputation: 20464
You need to associate a PROGRAM for the desired extension...
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.test]
[HKEY_CLASSES_ROOT\.test\shell]
[HKEY_CLASSES_ROOT\.test\shell\open]
[HKEY_CLASSES_ROOT\.test\shell\open\command]
@="notepad \"%1\""
Now create a new file in your desktop named "File.test" and double-click on it, notepad will open it.
I hope this helped you.
UPDATE
For registered extensions in your PC... for example ".bat" is registered by "batfile" key then you need to associate the program inside the registered key, i'll mean "batfile" key, not ".bat" key.
PS: Sorry for my english.
Upvotes: 0