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

[日期时间] 如何调用批处理在Total Commander窗口选中的文件/文件夹的名称中加上创建日期

本帖最后由 pcl_test 于 2016-12-15 03:04 编辑

如题,我在 Total commander 中自定义一条包含此批处理的命令并作为按钮放在工具栏上,当选中一个或多个文件或文件夹时,点击一下该按钮,会自动把该文件/文件夹的名称改为“原名称_创建日期”,比如:
文件 a.*  改为 a_161201.*
文件夹 A  改为 A_161201
我已经找到一段最接近的批处理也修改了一点点,但因为能力问题解决不了不足,请坛子里的批处理达人帮我修改一下,让它能解决下面这些问题:
1.在有的电脑上很奇怪的不起作用,我办公电脑和个人笔记本上都是装的Win7,它在个人笔记本上可以但在办公电脑上不行,TC的路径什么都是一模一样的,希望这段代码能不挑电脑,xp、win7等都能用;
2.只支持对文件夹改名,但不支持文件,这是最想改的;
3.貌似不支持多选。
  1. @echo off
  2. set ITEMPATH=%~dpnx1
  3. if "%ITEMPATH:~-1%"=="\" set ITEMPATH=%ITEMPATH:~0,-1%
  4. set ITEMDATESTR=
  5. for /f "usebackq delims= " %%t in (`dir "%ITEMPATH%?" 2^>nul ^| find "<"`) do set ITEMDATESTR=%%t
  6. if "%ITEMDATESTR%"=="" for /f "usebackq delims= " %%t in (`dir /a "%ITEMPATH%?" 2^>nul ^| find "<"`) do set ITEMDATESTR=%%t
  7. echo ITEMDATESTR: %ITEMDATESTR%
  8. set ITEMDATE=%ITEMDATESTR:~0,2%%ITEMDATESTR:~3,2%%ITEMDATESTR:~6,2%
  9. echo ITEMDATE: %ITEMDATE%
  10. move "%ITEMPATH%" "%ITEMPATH%_%ITEMDATE%"
复制代码
提前谢谢大神了!

谁来帮帮我这个菜鸟啊~
那个在其他电脑上无效果的原因找到了,是因为系统时间格式设置不同的原因,改下下列语句中截取字符的索引和数量就可以了,要是有不管系统时间怎么设置都能准确截取其中的年月日的方式就好了
  1. set ITEMDATE=%ITEMDATESTR:~0,2%%ITEMDATESTR:~3,2%%ITEMDATESTR:~6,2%
复制代码
适应于“2016/12/13”这种格式
改为
  1. set ITEMDATE=%ITEMDATESTR:~2,2%%ITEMDATESTR:~5,2%%ITEMDATESTR:~8,2%
复制代码
适应于"2016/12/13 星期二"格式

TOP

回复 1# 921_j


第10行改成这样试试能否在不同的电脑上获取正确的日期
  1. for /f %%i in ('powershell -c "Get-Date '%ITEMDATESTR%' -uformat '%%Y%%m%%d'"') do set "ITEMDATE=%%i"
复制代码

TOP

试试这样能否兼容文件和文件夹
  1. @echo off
  2. set ITEMPATH=%~dpnx1
  3. if "%ITEMPATH:~-1%"=="\" set ITEMPATH=%ITEMPATH:~0,-1%
  4. set ITEMDATESTR=
  5. for %%i in ("%ITEMPATH%") do set ITEMDATESTR=%%~ti
  6. echo ITEMDATESTR: %ITEMDATESTR%
  7. for /f %%i in ('powershell -c "Get-Date '%ITEMDATESTR%' -uformat '%%Y%%m%%d'"') do set "ITEMDATE=%%i"
  8. echo ITEMDATE: %ITEMDATE%
  9. ren "%ITEMPATH%" "%~n1_%ITEMDATE%%~x1"
复制代码

TOP

本帖最后由 921_j 于 2016-12-14 11:13 编辑

回复 4# GNU


谢谢高手
试了下你的代码,结果是文件和文件夹都能改名,但貌似没获取到日期,是一串“_ell.Commands.GetDateCommand”的字符,我觉得应该离得不远了……

TOP

楼主你说的这个PowerPro有直接调用TC的插件可以完成
http://ppro.totalcmd.net/Scripts/CopyDate.htm

http://ppro.totalcmd.net/
换言之,PowerPro 全局热键 + 脚本 就能实现你要的功能了。

PowerPro上手视频合集在这里:
http://bbs.wuyou.net/forum.php?m ... d=384079&extra=

TOP

回复 6# 我来了


    感谢指教,我去瞧瞧

TOP

回复 5# 921_j
  1. set ITEMPATH=%~dpnx1
  2. if "%ITEMPATH:~-1%"=="\" set ITEMPATH=%ITEMPATH:~0,-1%
  3. set ITEMDATESTR=
  4. for %%i in ("%ITEMPATH%") do set ITEMDATESTR=%%~ti
  5. echo ITEMDATESTR: %ITEMDATESTR%
  6. powershell -c "Get-Date '%ITEMDATESTR%' -uformat '%%Y%%m%%d'"
  7. for /f %%i in ('powershell -c "Get-Date '%ITEMDATESTR%' -uformat '%%Y%%m%%d'"') do set "ITEMDATE=%%i"
  8. echo ITEMDATE: %ITEMDATE%
  9. pause
复制代码
把这个脚本的执行结果发出来看看

TOP

回复 8# GNU


这表示可以了吗?
这是在我本本上的截图,明天再到工作电脑上去试试,要是可以的话就OK了
每次换个系统时间不同的电脑就要改一次截取字符是有点麻烦~
在本本上果然可以,不过感觉比纯DOS的命令慢多了,如果后面再接一个将文件夹里文件和子文件夹提取出来的批处理会导致先运行后面那个再运行这个,这样就达不到先将父目录改名避免同名被覆盖的效果了
我现在用的是这个更名批处理,混合了下
  1. set ITEMPATH=%~dpnx1
  2. if "%ITEMPATH:~-1%"=="\" set ITEMPATH=%ITEMPATH:~0,-1%
  3. set ITEMDATESTR=
  4. for %%i in ("%ITEMPATH%") do set ITEMDATESTR=%%~ti
  5. echo ITEMDATESTR: %ITEMDATESTR%
  6. set ITEMDATE=%ITEMDATESTR:~0,2%%ITEMDATESTR:~3,2%%ITEMDATESTR:~6,2%
  7. echo ITEMDATE: %ITEMDATE%
  8. ren "%ITEMPATH%" "%~n1_%ITEMDATE%%~x1"
复制代码
运行速度很快,接在TC里用TCFS2衔接另一个批处理,延迟1秒就可以正常顺序运行
  1. set ITEMPATH=%~dpnx1
  2. if "%ITEMPATH:~-1%"=="\" set ITEMPATH=%ITEMPATH:~0,-1%
  3. for /f "usebackq delims=" %%i in (`dir /a /b /s "%ITEMPATH%"`) do (attrib -s -h "%%i")
  4. set TARGETPATH=%~dpnx2
  5. for /f "usebackq delims=" %%f in (`dir /b "%ITEMPATH%"`) do move "%ITEMPATH%\%%f" "%TARGETPATH%\"
  6. for /f "usebackq delims=" %%f in (`dir /b /ah "%ITEMPATH%"`) do move "%ITEMPATH%\%%f" "%TARGETPATH%\"
复制代码
现在就是遇到时间设置不同的PC需要改提取字段,还有不支持选定的批量文件/文件夹这个缺陷了吧,可能那就太难了,再次感谢了!

TOP

回复 9# 921_j


BAT本身处理日期格式确实不方面,几个不同的方案你参考一下:
http://bbs.bathome.net/thread-3328-1-1.html

既然没有XP这种老系统,我是比较推荐4楼这种方案。

TOP

回复 10# GNU


    多谢指教,我去看看怎么弄~

TOP

返回列表