标题: [日期时间] 请教大侠, 如何使用批处理给特定的文件或文件夹添加日期和时间 [打印本页]
作者: 5i365 时间: 2021-5-5 19:56 标题: 请教大侠, 如何使用批处理给特定的文件或文件夹添加日期和时间
本帖最后由 5i365 于 2021-5-6 01:24 编辑
大家好,
有时需要手动给文件和文件夹添加时间后缀, 要看日期和时间一下, 不知道能不能用批处理简单的实现,提前感谢
将当前目录下, _开头的TXT文件或文件夹名字后面添加当前的日期和时间
例如, 当前目录下
有两个文件
_abc.txt
_123.txt
有两个文件夹
_bcd
_234
双击批处理时, 日期和时间是5月4号18点25分, 执行批处理后文件和文件夹的名字变成了:
_abc_05-04_18-25.txt
_123_05-04_18-25.txt
_bcd_05-04_18-25
_234_05-04_18-25
当第二次双击批处理时, 日期和时间是5月4号20点20分, 执行批处理后文件和文件夹的名字从上面的名字变成了:
_abc_05-04_20-20.txt
_123_05-04_20-20.txt
_bcd_05-04_20-20
_234_05-04_20-20
作者: WHY 时间: 2021-5-5 21:05
文件(目录)名称中不能包含英文半角冒号。
作者: 5i365 时间: 2021-5-6 01:25
回复 2# WHY
感谢提醒, 已更正!
作者: WHY 时间: 2021-5-6 21:33
- @echo off
- PowerShell "$dt=(get-Date).ToString('_MM-dd_HH-mm'); dir _* | ?{($_ -is [IO.FileInfo] -and $_.Extension -eq '.txt') -or $_ -is [IO.DirectoryInfo]} | ren -NewName {($_.BaseName -replace '(?>_\d\d-\d\d){2}$') + $dt + $_.Extension}"
- pause
复制代码
作者: 5i365 时间: 2021-5-7 06:20
回复 4# WHY
药到病除,立竿见影, 非常感谢!
作者: 5i365 时间: 2021-5-7 07:42
本帖最后由 5i365 于 2021-5-7 07:43 编辑
回复 4# WHY
你好, 刚刚尝试改一下文件名中的时间格式
以前是
_name_MM-dd_HH-mm
现在是
_name_MM.dd-HH.mm
这样看起来,更直观一些
我改成的代码是:
PowerShell "$dt=(get-Date).ToString('_MM.dd-HH.mm'); dir _* | ?{($_ -is [IO.FileInfo] -and $_.Extension -eq '.txt') -or $_ -is [IO.DirectoryInfo]} | ren -NewName {($_.BaseName -replace '(?>_\d\d\.\d\d){2}$') + $dt + $_.Extension}"
第一次执行的结果是对的, 而第二次执行后,名字是追加上的,没有替换成功, 应该是正则部分有错误, 对正则不太懂, 能指点一下吗? 非常感谢!
作者: newswan 时间: 2021-5-7 09:28
复制代码
作者: 5i365 时间: 2021-5-7 09:44
回复 7# newswan
你好, 感谢回复, 上面的表达式不知道加在什么地方, 对下面这句代码, 不明白什么意思,
ren -NewName {($_.BaseName -replace '(?>_\d\d-\d\d){2}$') + $dt + $_.Extension}
作者: newswan 时间: 2021-5-7 09:49
本帖最后由 newswan 于 2021-5-7 10:26 编辑
- PowerShell "$dt=(get-Date).ToString('_MM-dd_HH-mm'); dir _* | ?{($_ -is [IO.FileInfo] -and $_.Extension -eq '.txt') -or $_ -is [IO.DirectoryInfo]} | ren -NewName {($_.BaseName -replace '(?>(.\d\d)+)$') + $dt + $_.Extension}"
复制代码
那一句就是 重命名 三部分
($_.BaseName -replace '(?>(.\d\d)+)$')
$dt
$_.Extension
作者: 5i365 时间: 2021-5-7 13:11
回复 9# newswan
感谢帮忙,
下面的代码,对文件名是有效的, 但是对文件夹有问题
PowerShell "$dt=(get-Date).ToString('_MM.dd-HH.mm'); dir _* | ?{($_ -is [IO.FileInfo] -and $_.Extension -eq '.txt') -or $_ -is [IO.DirectoryInfo]} | ren -NewName {($_.BaseName -replace '(?>(.\d\d)+)$') + $dt + $_.Extension}"
结果:
文件名:
_新建文本文_05.07-13.09
文件夹名:
_CMD_05.07-13.09.08
作者: WHY 时间: 2021-5-7 23:28
本帖最后由 WHY 于 2021-5-7 23:30 编辑
回复 10# 5i365
假设文件夹名称为 _CMD
第一次重命名变成 _CMD_05.07-13.09
第二次重命名时,.09 被当做扩展名,正则表达式 '(?>(.\d\d)+)$' 仍然匹配 BaseName,即 _CMD_05.07-13,造成重命名错误。
先重命名文件,再重命名文件夹。- @echo off
- PowerShell "$reg='_\d\d\.\d\d-\d\d\.\d\d$'; $dt=(get-Date).ToString('_MM.dd-HH.mm'); dir _* | ?{$_ -is [IO.FileInfo] -and $_.Extension -eq '.txt'} | ren -NewName{($_.BaseName -replace $reg) + $dt + $_.Extension}; dir _* | ?{$_ -is [IO.DirectoryInfo]} | ren -NewName{($_.Name -replace $reg) + $dt}"
- pause
复制代码
作者: newswan 时间: 2021-5-8 03:32
个人习惯,日期时间格式 mmdd-HHMM
作者: 5i365 时间: 2021-5-8 11:31
回复 11# WHY
非常感谢!
作者: 5i365 时间: 2021-5-10 09:22
回复 11# WHY
你好, 今天执行批处理报错了,不知道问题出在哪儿了
作者: qixiaobin0715 时间: 2021-5-10 10:50
这个用纯批也能实现
作者: Gin_Q 时间: 2021-5-10 18:01
C# 当前目录- using System;
- using System.IO;
- using System.Text.RegularExpressions;
-
- class Program
- {
- static string workPath = Environment.CurrentDirectory;
- static string localtime = DateTime.Now.ToString("_MM-dd_HH-mm");
- static Regex dateRe = new Regex(@"(_\d{2}-\d{2}){2}");
-
- static void Main()
- {
- Console.WriteLine(workPath);
-
- foreach (string dir in Directory.GetDirectories(workPath, "_*"))
- {
- ChangeName(dir);
- }
-
- foreach (string file in Directory.GetFiles(workPath, "_*"))
- {
- ChangeName(file);
- }
- }
-
- static void ChangeName(string Name)
- {
- int splitIndex = Name.LastIndexOf("\\") + 1;
- string current = Name.Substring(splitIndex, Name.Length - splitIndex);
-
- if (dateRe.Match(current).Success)
- {
- try
- {
- Directory.Move(Name, Path.Combine(workPath, dateRe.Replace(current, localtime)));
- }
- catch{}
- }
- else
- {
- int Index = current.LastIndexOf(".");
- if (Index > 0 && File.Exists(Name))
- {
- try
- {
- Directory.Move(Name, Path.Combine(workPath, current.Insert(Index, localtime)));
- }
- catch{}
- }
- else
- {
- Directory.Move(Name, Name + localtime);
- }
- }
- }
- }
复制代码
作者: WHY 时间: 2021-5-10 19:57
回复 14# 5i365
https://ibb.co/dMcJfv3
这个错误提示与脚本无关。多用搜索引擎,参考别人的解决办法。
https://stackoverflow.com/questi ... ied-flutter-upgrade
作者: qixiaobin0715 时间: 2021-5-11 12:49
纯批代码:- @echo off
- set FFN=%date:~5,5%-%time:~,5%
- set FFN=%FFN:/=.%
- set FFN=%FFN::=.%
- set FFN=%FFN: =0%
- for /f "delims=" %%i in ('dir /b') do (
- for /f "tokens=1* delims=_" %%a in ("%%i") do (
- if not "%%~xi"==".bat" (
- if "%%~xi"==".txt" (
- ren "%%i" "_%%~na_%FFN%%%~xi"
- ) else (
- ren "%%i" "_%%~na_%FFN%"
- )
- )
- )
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |