Batch file 通过右键单击任何文件来运行批处理脚本

Batch file 通过右键单击任何文件来运行批处理脚本,batch-file,click,registry,Batch File,Click,Registry,其想法是右键单击任何文件,然后在下拉列表中选择“备份”,只复制文件,并在其名称末尾添加日期时间,然后可能将该副本移动到另一个驱动器 我想要一种运行批处理脚本的方法,右键单击一个文件并将其作为参数传入(不键入),或者不知何故知道该文件是脚本中应该使用的文件 主要针对windows XP,我需要它是本机的,因为我工作的许多站点计算机不属于我们,我不想复制过多的文件,也不想依赖任何超出可用标准命令的东西(三分之二的计算机没有powershell ect) 我知道如何更改文件选项以在特定文件夹位置(如下

其想法是右键单击任何文件,然后在下拉列表中选择“备份”,只复制文件,并在其名称末尾添加日期时间,然后可能将该副本移动到另一个驱动器

我想要一种运行批处理脚本的方法,右键单击一个文件并将其作为参数传入(不键入),或者不知何故知道该文件是脚本中应该使用的文件

主要针对windows XP,我需要它是本机的,因为我工作的许多站点计算机不属于我们,我不想复制过多的文件,也不想依赖任何超出可用标准命令的东西(三分之二的计算机没有powershell ect)

我知道如何更改文件选项以在特定文件夹位置(如下)打开cmd,我可能会将其更改为适用于1种特定的文件类型,但我不想为计算机上的每种文件类型添加密钥

[HKEY\U CLASSES\U ROOT\Folder\shell\1.bat\command] @=“c:\windows\system32\cmd.exe\%1”

从另一个网站一个工作,几乎解决了这对我来说

jvierra-“Windows一直具有这种能力,而不需要更改注册表

将bat或VBS文件放在桌面上。将文件拖放到bat图标上。bat将以%1的形式接收被删除文件的文件名,vbscript将以WScript的形式接收该文件。参数(0)


试试看。它工作得很好。bat或脚本可以从此点对文件执行任何操作。”

您可以将bat添加到“发送到”菜单。看

简而言之,只需将.bat文件复制到用户SendTo文件夹中

COPY MYBACKUP.BAT "%USERPROFILE%\SendTo"
用户通过选择“发送到”菜单项的选项调用bat

对于更复杂的参数化,如更改菜单中显示的文本或图标。。。您可以创建指向.BAT的链接,并将该链接放置在SendTo文件夹中,而不是.BAT本身

COPY "My very special backup.lnk" "%USERPROFILE%\SendTo"
您可以先运行一个快速测试。使用此内容创建BAT文件,并将其复制到Sendto文件夹

@echo off
echo Current Directory is %cd%
echo Current batch run is %0 %~dpnx0
echo Subject is %1 %~dpnx1
pause  

编辑:在一些命令之后,我通过添加所需的引号更正了COPY命令中的SendTo文件夹规范;我已经添加了一个测试示例,并更正了
%~dpnx
语法@PA示例(为了便于查看,复制到下面)的错误

@echo off
echo Current Directory is %cd%
echo Current batch run is %0 %dpnx0
echo Subject is %1 %dpnx1
pause  
我没有足够的声誉来回复@PA。您忘记在变量中包含~了。这个问答对我帮助很大,所以我希望这能帮助其他人。谢谢@daniel和@PA

更正了下面的测试示例

@echo off
echo Current Directory is %cd%
echo Current batch run is %0 %~dpnx0
echo Subject is %1 %~dpnx1
pause
如果只想回显文件名而不返回路径,那么可以使用%n1

例如:

echo Subject is %~n1

您还可以在
SendTo
文件夹中设置快捷方式,然后右键单击文件,选择“发送到”,然后选择“备份”。这将不需要修改注册表。我不知道如何从那里传入文件名。文件名由资源管理器作为第一个参数传递给调用的.bat。你试过了吗?你遇到了什么问题?这是一件很难解释的事情,也很难用谷歌搜索,这就是为什么我要问这个问题。批处理脚本需要知道单击了哪个文件。我理解在sendto中使用.bat可以让您右键单击并运行它。但是文件是如何作为第一个参数进入的呢?我想更好的解释是我有一个批处理脚本,它可以备份c:\onething.txt,我现在想把它从硬编码改为可以备份任何内容,我想运行脚本而不使用cmd或键入任何内容(仅单击,OP中的示例使用拖放到一个文件上,这有点奇怪,如果有一种方法可以通过发送到该文件来实现,它会感觉更正常)。在Windows 7上,发送到:目录是:C:\Users\YOUR\u USER\u ID\AppData\Roaming\Microsoft\Windows\SendTo或%AppData%\Microsoft\Windows\SendTo