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

When using Keyboard Shortcut : Command is being invoked from C:\Windows\system32 instead of Current Directory

我的目标是使用快捷方式 Ctrl+Alt+M

在当前文件夹中创建一个名为 _Misc 的文件夹

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

在快捷方式的属性中,转到 Shortcut 选项卡并输入以下值

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

Access is denied.

C:\Windows\system32>

所以我认为命令 mkdir _Misc 是从 C:\Windows\system32 而不是 D:\Test

调用的

我需要做什么?

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

一个解决方案是使用 发送到 上下文菜单,可以通过在 Windows Vista / Server 2008 或任何更高版本上向文件夹 %APPDATA%\Microsoft\Windows\SendTo 添加快捷方式来自定义Windows 版本。该目录在 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 Explorer 将末尾没有反斜杠的完全限定目录名传递给批处理文件。但是如果第一个参数是一个以反斜杠结尾的字符串,批处理文件在这个执行步骤知道第一个参数引用了一个真正存在的目录,因此可以立即继续创建子目录。

如果从 Windows Explorer 上下文菜单调用时参数字符串不以反斜杠结尾,则参数可以引用现有目录或现有文件 发送到。出于这个原因,批处理文件接下来检查参数字符串是否引用文件,在这种情况下,它使用文件路径作为目录路径。

如果该目录不存在,则创建子目录 _Misc。这甚至适用于以 \ServerName\ShareName\ 开头的 UNC 路径传递给批处理文件。

最后使用 endlocal 删除临时环境,导致删除环境变量 Directory 并恢复初始当前目录,因为它在执行命令 setlocal 时被压入堆栈。出于这个原因,最后一个命令行包含两个命令:endlocal 恢复默认环境和一个 if 用于检查子目录 _Misc 是否存在并在执行 [=17] 后使该目录成为当前目录=].

请注意,如果将 UNC 路径传递给批处理文件,cd /D 默认会失败。

必须从 %APPDATA%\Microsoft\Windows\SendTo 在 Windows Vista 和更高版本的 Windows 中创建的快捷方式文件调用此批处理文件,并使用您希望在 [=75= 中看到的名称]发送到 上下文菜单,并带有您喜欢的此上下文菜单项的图标。

快捷方式属性中的Target必须是:

%SystemRoot%\System32\cmd.exe /K "Path to batch file\BatchFileName.bat"

快捷方式 属性 Start in 可以为空,在这种情况下 %USERPROFILE% 被 Windows Explorer 使用,或者指定了一个现有目录作为默认当前目录由于缺少所需的权限,无法创建子目录 _Misc,最后一行的目录失败。

启动的命令进程保持运行因为选项/K在批处理文件执行完成后。命令进程将在使用选项 /C 而不是 /K.

时关闭

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • call /? ... 说明 %~1
  • cd /?
  • echo /?
  • endlocal /?
  • exit /?
  • for /?
  • goto /?
  • if /?
  • md /?
  • set /?
  • setlocal /?