繁体   English   中英

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

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

我的目标是使用快捷键Ctrl+Alt+M在当前文件夹中创建一个名为_Misc的文件夹

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

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

  • 目标: C:\\Windows\\System32\\cmd.exe /k mkdir _Misc

  • 开始于: %CD%

  • 快捷键: Ctrl+Alt+M

在此处输入图片说明

现在,当我在任何文件夹中按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 或任何更高版本的 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 资源管理器上下文菜单Send to调用参数一的字符串不以反斜杠结尾,则该参数可以引用现有目录或现有文件。 出于这个原因,批处理文件接下来检查参数字符串是否引用了一个文件,在这种情况下,它使用文件路径作为目录路径。

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

最后使用endlocal删除临时环境,导致删除环境变量Directory并恢复初始当前目录,因为它在执行命令setlocal被推入堆栈。 因此,最后一个命令行包含两个命令: endlocal用于恢复默认环境, if用于检查子目录_Misc存在并在执行endlocal后将此目录_Misc当前目录。

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM