用于复制所选文件的自定义上下文菜单选项未按预期工作

Custom Context Menu option for duplicating selected file not working as expected

我正在尝试创建一个自定义上下文菜单选项,用于复制所选文件并将日期和时间字符串附加到复制的文件名中。

下面是我在注册表中设置的命令,在 HKCU > Softwares > 类 > * > Shell > Duplicate This File > Command:

cmd /s /d /c @echo off & setlocal EnableExtensions EnableDelayedExpansion & set TIME=%TIME: =0% & set DateTimeFn=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%_!TIME:~0,2!-!TIME:~3,2!-!TIME:~6,2! & copy /y %1 %1_!DateTimeFn! & pause > nul

但不知何故 enabledelayedexpansion 无法正常工作,因为当我尝试在文件 test.js 上使用它时,它会将其复制为 test.js_!DateTimeFn!

它也不能很好地处理文件名中的空格。谁能指导和帮助解决这个问题?

与创建单独的批处理脚本相比,我更喜欢单行代码。

我试图在其中 运行 带有开关和变量扩展的命令的注册表文件示例:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\*\shell\Duplicate This File II]

[HKEY_CURRENT_USER\Software\Classes\*\shell\Duplicate This File II\command]
@="cmd /v:on /c @echo off & set TIME=%TIME: =0% & set DateTimeFn=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%_!TIME:~0,2!-!TIME:~3,2!-!TIME:~6,2! & copy /y %1 %1_!DateTimeFn! & pause > nul"

您需要在 FOR 命令中使用参数,然后您可以使用命令修饰符来获取与扩展名分开的文件名。

cmd /Q /V:ON /E:ON /C "set TIME=%%TIME: =0%% & set DateTimeFn=%%DATE:~10,4%%-%%DATE:~4,2%%-%%DATE:~7,2%%_!TIME:~0,2!-!TIME:~3,2!-!TIME:~6,2! &FOR %%G IN ("%1") do copy "%1" "%%~nG_!DateTimeFn!%%~xG" & pause>nul"

这是实际的注册表导出。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\*\shell\Time_Stamp_FileName]

[HKEY_CURRENT_USER\Software\Classes\*\shell\Time_Stamp_FileName\command]
@="cmd /Q /V:ON /E:ON /C \"set TIME=%%TIME: =0%% & set DateTimeFn=%%DATE:~10,4%%-%%DATE:~4,2%%-%%DATE:~7,2%%_!TIME:~0,2!-!TIME:~3,2!-!TIME:~6,2! &FOR %%G IN (\"%1\") do copy \"%1\" \"%%~nG_!DateTimeFn!%%~xG\" & pause>nul\""