[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理如何通过右键菜单复制某一个文件的“修改时间”

在 windows 中,对某一个文件右键,在弹出的右键菜单中选择底部的“属性”,于弹出的“属性”对话框第一个选项卡“常规”中可以看到三个时间:

  创建时间:××××年×月××日 ××:××:××
  修改时间:××××年×月××日 ××:××:××
  访问时间:××××年×月××日 ××:××:××

  求教各位大神,要怎样写批处理代码,才可以实现这样的需求:
  
  一、右键某一个文件,在弹出的右键菜单中,出现一个新项“复制「修改时间」”。
  二、点击“复制「修改时间」”,剪贴板中 将复制该文件的“修改时间”且同步完成格式美化。比如剪贴板最终格式是:
  本文件修改时间为 2019.11.10 12:09:16。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

简单写了一个,没有做右键菜单。
把文件拖放到bat文件即可。
  1. @echo off
  2. set file=%1
  3. if defined file (
  4. powershell -command "$a=get-item %1;$a.lastwritetime.tostring('yyyy.MM.dd hh:mm:ss')" |clip
  5. echo 已复制到剪贴板
  6. ) else echo 请拖入文件
  7. pause
复制代码

TOP

回复 2# cfwyy77_bat


  十分感谢 cfwyy77_bat 大侠费心帮忙!

  我还是想要使用右键功能,这样更加方便一些,省得频繁切换桌面 bat 文件与文件夹中的文件界面。
  1. [HKEY_CLASSES_ROOT\*\shell\复制「修改时间」]
  2. @="复制「修改时间」"
  3. [HKEY_CLASSES_ROOT\*\shell\复制「修改时间」\command]
  4. @="powershell -command "$a=get-item %1;$a.lastwritetime.tostring('yyyy.MM.dd hh:mm:ss')" |clip"
复制代码
以上是可以导入注册表的 .reg 结构化文本。但是我直接搬用 cfwyy77_bat 大侠的中间一句最长的代码,无法实现复制。
  具体,要怎样改呢?

TOP

回复 3# HeyJude

好吧。也就是写个注册表,命令里面的引号写在reg文件里要转义的啊,参数%1也要加引号 。
试试这个吧,导入.reg
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\*\shell\复制「修改时间」]
  3. @="复制「修改时间」"
  4. [HKEY_CLASSES_ROOT\*\shell\复制「修改时间」\command]
  5. @="powershell -command \"$a=get-item \\\"%1\\\";$a.lastwritetime.tostring('yyyy.MM.dd hh:mm:ss')\" |clip"
复制代码

TOP

回复 4# cfwyy77_bat


      非常感谢 cfwyy77_bat 大侠鼎力相助!
  很成功复制到了“修改时间”!


  现在仍有两点困惑,还想请 cfwyy77_bat 大侠看看是否有办法解决:

  一、怎样在复制出的时间文本 之前加上“本文件修改时间为”几个字,之后加上一个中文句号?
  即,最终,剪贴板中的文本样式是这样的:
  本文件修改时间为 2019.11.10 12:09:16。

  二、整个操作过程中,如何避免出现 Windows PowerShell 对话框(有时这个对话框长达半秒后才消失)?

TOP

  1. @echo off
  2. REM **********************************************************************************
  3. REM 管理员权限
  4. >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
  5. if '%errorlevel%' NEQ '0' (
  6. goto UACPrompt
  7. ) else ( goto gotAdmin )
  8. :UACPrompt
  9. echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
  10. echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
  11. "%temp%\getadmin.vbs"
  12. exit /B
  13. :gotAdmin
  14. if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
  15. REM **********************************************************************************
  16. REM 代码
  17. REM 双击bat文件删除或添加该功能
  18. chcp 65001&cls
  19. set cmd=cmd /E:ON /V:ON /c for %%%%i in ("%%1") do set time=%%%%^~ti^&set /p=本文件修改时间为 !time:~0,4!.!time:~5,2!.!time:~8,2! !time:~11,2!:!time:~14,2!^<nul^|clip
  20. reg delete "HKCR\*\shell\复制「修改时间」" /f 2>nul && echo 删除成功! || (
  21. reg add HKCR\*\shell\复制「修改时间」\command /ve /d "%cmd%" /f
  22. echo 添加成功!
  23. )
  24. pause
复制代码
1

评分人数

TOP

回复 6# went


   把in ("%%1") 改成 in (\"%%1\")
   不然文件路径含空格就会出错

TOP

回复 7# went


      非常感谢 went 大侠大力相助,写了那么长的代码!
  完美解决了我的所有问题!

  再次万分感谢!!!

TOP

回复 7# went

  再请教一下 went 大侠:

  一、如何让这个右键功能的 剪贴板中的文本,末尾不要有多出来的一个半角空格?

  二、如何让剪贴板中的文本,最后的一个字符是中文句号?
  即,最终,剪贴板中的文本样式是这样的:
  本文件修改时间为 2019.11.10 12:09:16。

TOP

  1. @echo off
  2. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
  3. chcp 65001&cls
  4. set "cmd=cmd /E:ON /V:ON /c for %%%%i in ("%%1") do set time=%%%%~ti&set /p="本文件修改时间为 !time:~0,4!.!time:~5,2!.!time:~8,2! !time:~11,2!:!time:~14,2!。"<nul|clip"
  5. set "cmd=%cmd:"=\"%"
  6. reg delete "HKCR\*\shell\复制「修改时间」" /f 2>nul && echo 删除成功! || reg add HKCR\*\shell\复制「修改时间」\command /ve /d "%cmd%" /f && echo 添加成功! || echo 添加失败!
  7. pause
复制代码

TOP

回复 10# went


      非常感谢 went 大侠又再帮忙写了神妙代码!
  代码完美提取出了“本文件修改时间为 2019.11.10 12:09:16。”

  再次感谢!!!

TOP

返回列表