Board logo

标题: [文本处理] 批处理如何修改txt文本里的日期? [打印本页]

作者: weiwei9527    时间: 2020-5-18 16:15     标题: 批处理如何修改txt文本里的日期?

本帖最后由 weiwei9527 于 2020-5-19 07:40 编辑

大家好,我有个批处理麻烦大家帮看看怎么写。批处理要求如下:
有个文档aa.txt,里面"endDate\":\"2020-xx-xx 23:55:00\"
和"startDate\":\"2020-xx-xx 00:00:00\"两个日期2020-xx-xx改成当前系统的日期(只改日期,不改时\分\秒),且2020-xx-xx是指2020年某月某日,某月某日是不固定
怎么处理进行修改,谢谢
作者: smss    时间: 2020-5-18 21:06

  1. @echo off
  2. set date=%date:~0,4%-%date:~5,2%-%date:~8,2%&set time=%time:~,2%:%time:~3,2%:%time:~6,2%
  3. PowerShell "$s=[IO.File]::ReadAllText('aa.txt', [Text.Encoding]::Default) -replace '"endDate\":\"2020-xx-xx 23:55:00\", '"endDate\":\"%date% %time%\"';[IO.File]::WriteAllText('aa.txt', $s, [Text.Encoding]::Default)"
  4. pause
复制代码

作者: weiwei9527    时间: 2020-5-18 23:25

回复 2# smss

你好,提示以下报错:
所在位置 行:1 字符: 120
+ ... 13 23:55:00", 'endDate":"2020-05-18 23:23:54"';[IO.File]::WriteAllText('r
ealtime ...
+                    ~~~~~~~~~~~~~~~~~~~~
表达式或语句中包含意外的标记“endDate":"2020-05-18”。
所在位置 行:1 字符: 149
+ ... -05-18 23:23:54"';[IO.File]::WriteAllText('realtime_success.txt', $s, [Te
xt.Enco ...
+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~
字符串缺少终止符: "。
    + CategoryInfo          : ParserError: ( [], ParentContainsErrorRecordEx
   ception
    + FullyQualifiedErrorId : UnexpectedToken

请按任意键继续. . .
作者: weiwei9527    时间: 2020-5-18 23:27

回复 2# smss
说明一下:2020-xx-xx是2020年某月某日,某月某日是不固定
作者: smss    时间: 2020-5-19 02:44

本帖最后由 pcl_test 于 2020-5-19 04:39 编辑
  1. <# :
  2. @echo off
  3. powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%~dp0'"
  4. pause
  5. exit
  6. #>
  7. $leftstr='"endDate\":\"';
  8. $rightstr='\"';
  9. $path=$args[0];
  10. $newfolder=$path+'';
  11. if(-not (test-path -liter $newfolder)){[void](md $newfolder)};
  12. $files=@(dir -liter $path|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])});
  13. $enc=[Text.Encoding]::Default;
  14. $regstr='('+[regex]::Escape($leftstr)+').+?('+[regex]::Escape($rightstr)+')';
  15. for($i=0;$i -lt $files.length;$i++){
  16.     write-host $files[$i].Name;
  17.     $text=[IO.File]::ReadAllText($files[$i].FullName, $enc);
  18.     $text=[regex]::replace($text,$regstr,{param($a);$a.groups[1].value+ (Get-Date).ToString("yyyy-M-d HH:mm:ss") +$a.groups[2].value;});
  19.     $newfile=$newfolder+'\'+$files[$i].Name;
  20.     [IO.File]::WriteAllText($newfile, $text, $enc);
  21.     break;
  22. };
复制代码

作者: weiwei9527    时间: 2020-5-19 07:45

回复 5# smss

你好,有3个疑问:
1、能不能只改日期部分;
2、如果我设置成计划任务来执行,该批处理是不是只处理和它同文件夹下面的txt文件?还是全电脑磁盘里的txt文件?
3、文件里还有"startDate\":\"2020-xx-xx 00:00:00\"没改日期,是我忘了写,这个日期也改一下
作者: WHY    时间: 2020-5-19 10:31

C:\Users\WHY>cd /d E:\Test\

E:\Test>type aa.txt
有个文档aa.txt,里面"endDate\":\"2020-04-20 23:55:00\"
和"startDate\":\"2020-05-30 00:00:00\"两个日期2020-xx-xx改成当前系统的日期

E:\Test>PowerShell "(type aa.txt) -replace '(?<=(?:start|end)Date\\\\\":\\\\\")\d{4}-\d\d-\d\d', (get-Date).ToString('yyyy-MM-dd')"
有个文档aa.txt,里面"endDate\":\"2020-05-19 23:55:00\"
和"startDate\":\"2020-05-19 00:00:00\"两个日期2020-xx-xx改成当前系统的日期

E:\Test>

                                                                                                           
作者: smss    时间: 2020-5-19 12:43

  1. PowerShell "$s=[IO.File]::ReadAllText('aa.txt', [Text.Encoding]::Default) -replace '(?<=(?:start|end)Date\\\\\":\\\\\")\d{4}-\d\d-\d\d', (get-Date).ToString('yyyy-MM-dd');[IO.File]::WriteAllText('aa.txt', $s, [Text.Encoding]::Default)"
复制代码

作者: weiwei9527    时间: 2020-5-19 16:25

本帖最后由 weiwei9527 于 2020-5-19 16:27 编辑

回复 8# smss
你好,我直接把原始文档aa.txt的内容贴出来,如下:
http://55.44.138.201:9081/dahuaIS/rest/picrecord/search        {"q":"{\"endDate\":\"2020-05-17 16:10:03\",\"page\":{\"pageNo\":1,\"pageSize\":1000},\"startDate\":\"2020-05-15 16:10:03\"}"}
我要把
endDate的时间改为:当前系统日期  23:58:00
startDate的时间改为:当前系统日期  00:00:00
注:日期部分都设置为当前系统日期,endDater的时间固定为23:58:00;startDate的时间固定为00:00:00
作者: smss    时间: 2020-5-19 17:39

回复  smss
你好,我直接把原始文档aa.txt的内容贴出来,如下:
http://55.44.138.201:9081/dahuaIS/res ...
weiwei9527 发表于 2020-5-19 16:25
  1. PowerShell "$s=[IO.File]::ReadAllText('aa.txt', [Text.Encoding]::Default) -replace '(?<=(?:end)Date\\\\\":\\\\\")\d{4}-\d\d-\d\d \d\d:\d\d:\d\d', (get-Date).ToString('yyyy-MM-dd 23:58:00') -replace '(?<=(?:start)Date\\\\\":\\\\\")\d{4}-\d\d-\d\d \d\d:\d\d:\d\d', (get-Date).ToString('yyyy-MM-dd 00:00:00');[IO.File]::WriteAllText('aa1.txt', $s, [Text.Encoding]::Default)"
复制代码
能给原文别举例代指 清晰的描述能快速高效的解决问题
原文一改再改 建议发有偿区资助论坛
作者: weiwei9527    时间: 2020-5-19 18:00

回复 10# smss

不好意思,是我没把问题说清楚,下次我到有偿的页面去发帖,这次按照你的脚本执行后,得到下面结果
http://55.51.138.201:9081/dahuaIS/rest/picrecord/search        {"q":"{\"endDate\":\"2020-5-14 15:37:25\",\"page\":{\"pageNo\":1,\"pageSize\":1000},\"startDate\":\"2020-05-19 00:00:00\"}"}       

endDate的日期和时间没有改成功,麻烦再看看
作者: smss    时间: 2020-5-19 18:02

本帖最后由 smss 于 2020-5-19 18:16 编辑

2020-5-14应该是2020-05-14格式 机器只会生成固定格式 你手动改成单数导致筛选不到想想你本身问题
作者: weiwei9527    时间: 2020-5-19 19:36

回复 12# smss

谢谢指正




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2