标题: [文本处理] 批处理修改不同文件中的递增序列时间 [打印本页]
作者: hoyu 时间: 2017-11-13 23:05 标题: 批处理修改不同文件中的递增序列时间
文件夹A下有子文件夹a1、a2、a3.....,每个子文件夹a1、a2、a3.....中都有同名xml文件b.xml,
每个b.xml文件中有多个时间节点,倒数第1个时间节点为 <Time>2017-11-13 T00:45:19.1870762+08:00</Time>。
现期望将a1文件夹中b.xml文件的倒数第1个时间节点修改为<Time>2017-11-13 T00:00:19.1870762+08:00</Time>
a2文件夹中b.xml文件的倒数第1个时间节点修改为<Time>2017-11-13 T00:22:19.1870762+08:00</Time>
a3文件夹中b.xml文件的倒数第1个时间节点修改为<Time>2017-11-13 T00:44:19.1870762+08:00</Time>
即后一个b.xml文件的倒数第1个时间节点比前一个增加22分钟,批处理如何实现?
附件 :文件夹A
作者: WHY 时间: 2017-11-15 16:52
本帖最后由 WHY 于 2017-11-15 21:41 编辑
PowerShell 代码,使用方法:保存为 test.ps1,右键单击 test.ps1,选择 "使用 PowerShell 运行"。- $dtm = [DateTime]'2017-11-13 T00:00:19.1870762+08:00';
- $reg = '(?i)(?<=<Time>)[\S\s]*?(?=</Time>)';
-
- #遍历E:\a\a1,a2,a3...文件夹中的b.xml文件,以父文件夹名称排序
- $arr = dir 'E:\a\a*\b.xml' | sort{$_.Directory.Name.PadLeft(10,'0')};
-
- $arr | ForEach {
- $fmt = '{0:s}{1:.fffffff}{2:zzz}' -f $dtm, $dtm, $dtm; #日期格式化
- $dtm = $dtm.AddMinutes(22); #日期递增22分钟
- $str = [IO.File]::ReadAllText($_, [Text.Encoding]::UTF8); #打开并读取文件内容
- $offSet = [regex]::Match($str, $reg, 'RightToLeft').Index; #获取最后一个Time节点偏移值
- $str = ([regex]$reg).Replace($str, $fmt, 1, $offSet); #替换
- [IO.File]::WriteAllText($_, $str, [Text.Encoding]::UTF8); #保存文件
- }
复制代码
- $dtm = [DateTime]'2017-11-13 T00:00:19.1870762+08:00';
- $arr = dir E:\a\a*\b.xml | sort{$_.Directory.Name.PadLeft(10,'0')};
-
- $arr | ForEach {
- $xml = [xml](type $_ -Encoding UTF8);
- $fmt = '{0:s}{1:.fffffff}{2:zzz}' -f $dtm, $dtm, $dtm;
- $dtm = $dtm.AddMinutes(22);
- (Select-XML -xml $xml -XPath '//Time')[-1].Node.InnerText = $fmt;
- $xml.save($_)
- }
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |