标题: [文件操作] [已解决]批处理如何通过右键菜单复制某一个文件的“修改时间” [打印本页]
作者: HeyJude 时间: 2019-11-10 12:09 标题: [已解决]批处理如何通过右键菜单复制某一个文件的“修改时间”
在 windows 中,对某一个文件右键,在弹出的右键菜单中选择底部的“属性”,于弹出的“属性”对话框第一个选项卡“常规”中可以看到三个时间:
创建时间:××××年×月××日 ××:××:××
修改时间:××××年×月××日 ××:××:××
访问时间:××××年×月××日 ××:××:××
求教各位大神,要怎样写批处理代码,才可以实现这样的需求:
一、右键某一个文件,在弹出的右键菜单中,出现一个新项“复制「修改时间」”。
二、点击“复制「修改时间」”,剪贴板中 将复制该文件的“修改时间”且同步完成格式美化。比如剪贴板最终格式是:
本文件修改时间为 2019.11.10 12:09:16。
作者: cfwyy77_bat 时间: 2019-11-10 15:47
简单写了一个,没有做右键菜单。
把文件拖放到bat文件即可。- @echo off
- set file=%1
- if defined file (
- powershell -command "$a=get-item %1;$a.lastwritetime.tostring('yyyy.MM.dd hh:mm:ss')" |clip
- echo 已复制到剪贴板
- ) else echo 请拖入文件
- pause
复制代码
作者: HeyJude 时间: 2019-11-10 19:44
回复 2# cfwyy77_bat
十分感谢 cfwyy77_bat 大侠费心帮忙!
我还是想要使用右键功能,这样更加方便一些,省得频繁切换桌面 bat 文件与文件夹中的文件界面。- [HKEY_CLASSES_ROOT\*\shell\复制「修改时间」]
- @="复制「修改时间」"
-
- [HKEY_CLASSES_ROOT\*\shell\复制「修改时间」\command]
- @="powershell -command "$a=get-item %1;$a.lastwritetime.tostring('yyyy.MM.dd hh:mm:ss')" |clip"
复制代码
以上是可以导入注册表的 .reg 结构化文本。但是我直接搬用 cfwyy77_bat 大侠的中间一句最长的代码,无法实现复制。
具体,要怎样改呢?
作者: cfwyy77_bat 时间: 2019-11-11 10:00
回复 3# HeyJude
好吧。也就是写个注册表,命令里面的引号写在reg文件里要转义的啊,参数%1也要加引号 。
试试这个吧,导入.reg- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\*\shell\复制「修改时间」]
- @="复制「修改时间」"
-
- [HKEY_CLASSES_ROOT\*\shell\复制「修改时间」\command]
- @="powershell -command \"$a=get-item \\\"%1\\\";$a.lastwritetime.tostring('yyyy.MM.dd hh:mm:ss')\" |clip"
复制代码
作者: HeyJude 时间: 2019-11-11 21:22
回复 4# cfwyy77_bat
非常感谢 cfwyy77_bat 大侠鼎力相助!
很成功复制到了“修改时间”!
现在仍有两点困惑,还想请 cfwyy77_bat 大侠看看是否有办法解决:
一、怎样在复制出的时间文本 之前加上“本文件修改时间为”几个字,之后加上一个中文句号?
即,最终,剪贴板中的文本样式是这样的:
本文件修改时间为 2019.11.10 12:09:16。
二、整个操作过程中,如何避免出现 Windows PowerShell 对话框(有时这个对话框长达半秒后才消失)?
作者: went 时间: 2019-11-12 22:11
- @echo off
- REM **********************************************************************************
- REM 管理员权限
- >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
- if '%errorlevel%' NEQ '0' (
- goto UACPrompt
- ) else ( goto gotAdmin )
- :UACPrompt
- echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
- echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
- "%temp%\getadmin.vbs"
- exit /B
- :gotAdmin
- if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
- REM **********************************************************************************
-
- REM 代码
- REM 双击bat文件删除或添加该功能
- chcp 65001&cls
- 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
- reg delete "HKCR\*\shell\复制「修改时间」" /f 2>nul && echo 删除成功! || (
- reg add HKCR\*\shell\复制「修改时间」\command /ve /d "%cmd%" /f
- echo 添加成功!
- )
- pause
复制代码
作者: went 时间: 2019-11-12 22:29
回复 6# went
把in ("%%1") 改成 in (\"%%1\")
不然文件路径含空格就会出错
作者: HeyJude 时间: 2019-11-12 23:00
回复 7# went
非常感谢 went 大侠大力相助,写了那么长的代码!
完美解决了我的所有问题!
再次万分感谢!!!
作者: HeyJude 时间: 2019-11-13 21:48
回复 7# went
再请教一下 went 大侠:
一、如何让这个右键功能的 剪贴板中的文本,末尾不要有多出来的一个半角空格?
二、如何让剪贴板中的文本,最后的一个字符是中文句号?
即,最终,剪贴板中的文本样式是这样的:
本文件修改时间为 2019.11.10 12:09:16。
作者: went 时间: 2019-11-14 19:39
- @echo off
- %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
- chcp 65001&cls
- 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"
- set "cmd=%cmd:"=\"%"
- reg delete "HKCR\*\shell\复制「修改时间」" /f 2>nul && echo 删除成功! || reg add HKCR\*\shell\复制「修改时间」\command /ve /d "%cmd%" /f && echo 添加成功! || echo 添加失败!
- pause
复制代码
作者: HeyJude 时间: 2019-11-14 21:22
回复 10# went
非常感谢 went 大侠又再帮忙写了神妙代码!
代码完美提取出了“本文件修改时间为 2019.11.10 12:09:16。”
再次感谢!!!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |