如何创建表现为.cmd/.bat的文件扩展名? [英] How to create file extension that behaves as .cmd/.bat?

查看:73
本文介绍了如何创建表现为.cmd/.bat的文件扩展名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想这是一个奇怪的问题.但是我很好奇.到目前为止,这是我尝试过的: 我已经导出并比较了[HKEY_CLASSES_ROOT\batfile][HKEY_CLASSES_ROOT\cmdfile][HKEY_CLASSES_ROOT\.bat][HKEY_CLASSES_ROOT\.cmd]中的值.我注意到的唯一区别是HKEY_CLASSES_ROOT\*\FrienflyTypeName,这对它们的执行并不重要.因此,我为所需的扩展名创建了具有相同数据的注册表值(我正在尝试创建 .scjs 文件扩展名):

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}"

我还将值(.SCJS)添加到了PATEXT变量-> .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.SCJS

Also I've added the value (.SCJS) to the PATEXT variable -> .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.SCJS

但是当我运行文件时,我得到: test.scjs不是有效的Win32应用程序.访问被拒绝.

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\" \"%*\""

在system32中我有caller.bat的地方:

where I have caller.bat in system32:

@echo off
copy "%~nx1"  "%temp%\%~nx1.bat" /Y >nul
"%temp%\%~nx1" .bat %~2

只想cmd /c很难管理参数.看起来目前没有办法处理命令行参数.

wish simply cmd /c it's harder to manage the arguments.Looks at the moment there's no way to handle command line arguments.

更多编辑:处理命令行参数的一种方法是使用[HKEY_CLASSES_ROOT\scjsfile\shell\open\Run]而不是[HKEY_CLASSES_ROOT\scjsfile\shell\open\command].我现在不知道到底有什么区别,但是可行(我从AutoIT安装中看到了这一点:-)).

ONE MORE 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 :-) ).

推荐答案

尽管这已经被接受了,但我认为我会在我被黑的情况中补充答案.

Although this has already been accepted I thought I would add in my answer that I hacked together.

我创建了自己的文件扩展名.bali,在其中可以放置一些批处理命令并通过打开文件来运行它们.

I created my own file extension .bali in which I can put some batch commands and run them by opening the file.

.bali注册表导出看起来像这样

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).

balifile注册表导出看起来像这样

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"

我的file.bali看起来像这样

echo hello bali
pause

该文件也将带有cmd图标,并且在运行时它将在提示符下运行命令,显然输出hello bali.

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 :)

这篇关于如何创建表现为.cmd/.bat的文件扩展名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆