2022年6月

近日由于频繁需要在开发项目中使用 CMD, 所以每次都需要 Win + R 键呼出 CMD,非常的麻烦。
于是乎搜索了一番,发现可以使用注册表解决这个问题,我们一起来看具体步骤:

  1. 使用 Win + R 键呼出运行, 然后输入 regedit 打开注册表。
  2. 找到 HKEY_CLASSES_ROOT 栏, 然后找到你想添加的位置。例如文件夹目录下, 则为 Directory
  3. 找到项 shelll 并右键, 然后点击 新建 (N)->项 (K), 输入自定义的名称。
  4. 可以在右侧的 (默认) 里输入右键时需要显示的提示, 这里例如 在此处打开CMD命令提示符
  5. 若需要特定的图标显示, 可以在当前项创建 字符串值 并命名为 Icon, 然后输入Icon的资源地址 (这里例如 C:\Windows\System32\cmd.exe)。
  6. 在当前项中 创建子项, 并命名为 command
  7. command 中的 (默认) 位置输入单击此选项时需要执行的命令, 这里为 cmd.exe
  8. 打开一个文件夹, 对准TA点右键试一下吧~

PS: 若需要在空白处显示, 对应的项不是 Directory, 而是其目录下的 Background

各项菜单的注册表路径

桌面空白处:计算机\HKEY_CLASSES_ROOT\DesktopBackground\Shell
文件:计算机\HKEY_CLASSES_ROOT*\shell
文件夹:计算机\HKEY_CLASSES_ROOT\Directory\shell
文件和文件夹:计算机\HKEY_CLASSES_ROOT\AllFilesystemObjects\shell
文件夹空白处:计算机\HKEY_CLASSES_ROOT\Directory\Background\shell


本文参考 这里 学习到的, 欢迎阅读原文。

最近刚开始学习Vue,由于没有使用vue-cli脚手架,并且本地的编译环境并非Nginx设定的web目录,所以尝试使用 npm run build 之后每次都需要手动将编译好的 dist 目录移动到Nginx设定的web目录下,非常的麻烦。(也许有更方便的办法,但耐于我是初学者一时半会不知道如何正确配置,所以使用了如下的脚本)

然后我便有了之前的以下代码:

@echo off
chcp 65001
set ORIGINAL_PATH=%cd%
cd ../..
set VUE_BUILT_PATH=%cd%
set TARGET_DEL_DIR=vuetest
set CURRENT_PATH=%VUE_BUILT_PATH%\%TARGET_DEL_DIR%
set input=N

if exist %CURRENT_PATH% (
    set /p input="本文件夹下的所有文件将被删除!此操作不可逆![Y/N]  "

    if %input% == Y (
        echo 路径: %CURRENT_PATH%  [已确认删除!]
        rd/s/q %CURRENT_PATH%
    ) else (
        echo 已取消.
    )
)

cd %ORIGINAL_PATH%
pause

结果后来经过非常之久的脚本执行,发现 set 的值 input 始终无法将参数传递到 if 语句里面,百度了半天也不知道是什么原因。

后来我突然意识到,会不会跟JavaScript一样变量都有作用域?然后我又尝试将 set input=N 移动到了 if 语句里面,结果还是不行。后来我干脆直接删除了 if 语句的判断,发现可以了。

直到那时候我才意识到可能是CMD的 "BUG" 或者 "特性" 导致的吧。

于是改进了代码之后有了如下的最终脚本:

@echo off
chcp 65001
TITLE 编译文件移动脚本
set ORIGINAL_PATH=%cd%
cd ../..
set VUE_BUILT_PATH=%cd%
set TARGET_DEL_DIR=vuetest
set CURRENT_PATH=%VUE_BUILT_PATH%\%TARGET_DEL_DIR%
set input=N

if not exist %CURRENT_PATH% (
    echo 正在移动编译文件夹...
    move %ORIGINAL_PATH%\dist %CURRENT_PATH%
    pause
    exit
)

set /p input="本文件夹下的所有文件将被删除!此操作不可逆![Y/N]  "

if %input% == Y (
    echo 路径: %CURRENT_PATH%  [已确认删除!]
    rd/s/q %CURRENT_PATH%
) else (
    echo 已取消.
)

cd %ORIGINAL_PATH%
pause

真的不知道是什么奇葩的问题导致的,好在最后解决了:)