代码之家  ›  专栏  ›  技术社区  ›  Vicky Dev

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

  •  0
  • Vicky Dev  · 技术社区  · 6 年前

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

    下面是我在注册表中的HKCU>软件>类>*>外壳>复制此文件>命令中设置的命令:

    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"
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Squashman Stephan    6 年前

    您需要在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\""