如何通过资源管理器右键菜单用批处理创建文件夹/文件的零字节副本?
右键菜单执行Robocopy批处理异常问题解决
操作背景与配置
批处理脚本设置
- 文件夹处理脚本
C:\com\folders.bat:
Robocopy /Create /Purge /S "%cd%" "%cd% Dummy" Pause
- 文件处理脚本
C:\com\files.bat:
Robocopy /Create /Purge "%cd%" "%cd%/Dummy" pause
注册表右键菜单配置
针对文件夹右键菜单,在注册表项 HKEY_CLASSES_ROOT\Directory\shell\Dummy\command 中,将默认值(REG_SZ类型)设置为:
"C:\com\folders.bat" "%1"
异常现象
- 右键点击文件夹执行脚本时,生成的是目标文件夹的父文件夹的完整副本(包含所有子文件夹和文件),而非目标文件夹本身的副本;
- 右键点击文件执行脚本时,会把当前文件夹内所有文件的零字节副本生成到同目录的
Dummy文件夹,而非仅处理右键选中的单个文件; - 直接在命令提示符中运行两个批处理脚本,结果完全符合预期。
问题根源与修正方案
问题核心是:通过右键菜单启动批处理时,%cd% 取的是系统默认路径(如C:\Windows\System32),而非右键点击对象的所在路径,且原脚本未使用注册表传递的目标路径参数%1。
修正后的文件夹处理脚本(folders.bat)
@echo off if not exist "%~1\" ( echo 请通过文件夹右键菜单执行此脚本 pause exit /b 1 ) Robocopy /Create /Purge /S "%~1" "%~1 Dummy" Pause
修正后的文件处理脚本(files.bat)
@echo off if not exist "%~1" ( echo 请通过文件右键菜单执行此脚本 pause exit /b 1 ) set "file_dir=%~dp1" set "dummy_dir=%file_dir%Dummy" Robocopy /Create /Purge "%file_dir%" "%dummy_dir%" "%~nx1" pause
补充注册表配置(文件右键菜单)
需新增文件右键菜单的注册表项 HKEY_CLASSES_ROOT\*\shell\Dummy\command,将默认值设置为:
"C:\com\files.bat" "%1"
内容的提问来源于stack exchange,提问作者Gurpreet Sidhu
相关产品推荐
相关产品推荐

