使用键盘快捷键时:从C:\ Windows \ system32而不是当前目录中调用命令

时间:2018-08-21 08:54:33

标签: windows cmd shortcut

我的目标是使用快捷方式background: radial-gradient(#2a4053 5%, #283c4d 15%, #1e262d 60%);在当前文件夹中创建一个名为_Misc的文件夹

我在桌面上创建了一个快捷方式。

在快捷方式的属性中,转到Ctrl+Alt+M标签,并输入以下值

  • 目标:Shortcut

  • 开始于:C:\Windows\System32\cmd.exe /k mkdir _Misc

  • 快捷键:%CD%

enter image description here

现在,当我在任何文件夹中按Ctrl+Alt+M时,例如:Ctrl+Alt+M会显示

D:\Test

所以我认为命令Access is denied. C:\Windows\system32> 是从mkdir _Misc而不是C:\Windows\system32调用的

我需要做什么?

1 个答案:

答案 0 :(得分:1)

这种方法永远行不通。快捷方式文件的快捷键可以在任何地方使用。例如,即使在浏览器中查看此页面时按下 Ctrl + Alt + M ,Windows也会执行Target命令行。浏览器中具有输入焦点的当前目录应该是哪个目录?

一种解决方案是使用发送至上下文菜单,该菜单可通过在Windows Vista / Server 2008或任何更高版本的Windows版本上向文件夹%APPDATA%\Microsoft\Windows\SendTo添加快捷方式进行自定义。在Windows XP / Server 2003上,该目录为%UserProfile%\SendTo

使用以下几行在所需目录中创建批处理文件:

@echo off
if "%~1" == "" exit
if not exist "%~1" exit

setlocal EnableExtensions DisableDelayedExpansion
set "Directory=%~1"
if "%Directory:~-1%" == "\" goto MakeDirectory
if not exist "%~1\" for %%I in ("%~1") do set "Directory=%%~dpI" & goto MakeDirectory
set "Directory=%Directory%\"

:MakeDirectory
if not exist "%Directory%_Misc\" md "%Directory%_Misc"
endlocal & if exist "%Directory%_Misc\" cd /D "%Directory%_Misc"

如果不使用任何参数或使用不存在目录或文件的字符串来调用批处理文件,则第二行和第三行将导致退出批处理文件并启动命令过程。

接下来的几行使发送到完整的合格目录或批处理文件成为可能。批处理文件实际上不支持带有相对路径的目录或文件名。

Windows资源管理器将完整的合格目录名称传递到批处理文件,结尾没有反斜杠。但是,如果参数一个是以反斜杠结尾的字符串,则批处理文件在此执行步骤中知道第一个参数引用了一个实际存在的目录,因此可以立即继续创建子目录。

在参数字符串不以反斜杠结尾的情况下(例如从Windows资源管理器上下文菜单发送到调用),该参数可以引用现有目录或现有文件。因此,批处理文件接下来将检查参数字符串是否引用了文件,在这种情况下,它将使用文件路径作为目录路径。

然后如果子目录_Misc不存在,则创建该子目录。即使将以\\ServerName\ShareName\开头的UNC路径传递给批处理文件,该命令也可以使用。

最后,使用endlocal删除临时环境,导致删除环境变量Directory,并在执行命令setlocal时将初始当前目录推送到堆栈中,从而恢复该目录。因此,最后一个命令行包含两个命令:endlocal用于恢复默认环境,以及if用于检查子目录_Misc的存在,并在执行{{1 }}。

请注意,如果将UNC路径传递到批处理文件,则endlocal默认情况下失败。

必须从在Windows Vista和更高版本的Windows上cd /D中创建的快捷方式文件中调用此批处理文件,该快捷方式文件的名称要在发送至上下文菜单中看到,并且带有您希望用于此上下文菜单项的图标。

快捷方式属性中的%APPDATA%\Microsoft\Windows\SendTo必须为:

Target

在这种情况下,Windows资源管理器使用%SystemRoot%\System32\cmd.exe /K "Path to batch file\BatchFileName.bat" 时,快捷方式属性Start in可以为空,或者指定了一个现有目录,如果由于子目录而导致最后一行失败,则用作默认当前目录由于缺少必需的权限,无法创建%USERPROFILE%

在完成批处理文件执行后,由于选项_Misc,启动的命令进程保持运行。使用选项/K而不是/C将关闭命令过程。

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • /K ...解释call /?
  • %~1
  • cd /?
  • echo /?
  • endlocal /?
  • exit /?
  • for /?
  • goto /?
  • if /?
  • md /?
  • set /?