本帖最后由 Bonnie 于 2022-11-14 16:09 编辑
- <# :
- cls&echo off&cd /d "%~dp0"&rem 编码ANSI
- set "tmpfile=%tmp%\t.t"
- powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText("%~f0",[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
- for /f "tokens=1* delims=|" %%a in ('type "%tmpfile%"') do (
- findstr /s /m "3101DF05" "%%a\*.xml"
- )
- pause
- exit
- #>
- $folder="C:\oud\traces";
- $subfolder=@("AC","ADS","AP");
- [System.Collections.ArrayList]$fdlist=@();
- for($i=0;$i -lt $subfolder.length;$i++){
- $fd=$folder+'\'+$subfolder[$i];
- if(test-path -literal $fd){
- $folders=@(dir -literal $fd|?{$_ -is [System.IO.DirectoryInfo]});
- for($j=0;$j -lt $folders.length;$j++){
- [void]$fdlist.add($folders[$j]);
- }
- }
- }
- $tmpfile=$env:tmpfile;[System.Collections.ArrayList]$s=@();
- $newfolder=($env:USERPROFILE)+'\Desktop\'+(get-date).ToString('yyyyMMdd_HHmm')+'';
- if($fdlist.count -ge 1){
- $arr=@($fdlist|sort {$_.CreationTime} -Descending);
- write-host ('['+$arr[0].CreationTime.ToString('yyyy-MM-dd HH:mm:ss')+']'+$arr[0].FullName);
- [void]$s.add($arr[0].FullName+'|'+$newfolder);
- }
- [void]$s.add('C:\AWRoot\dtwr\stcapi\home\temp|'+$newfolder);
- [IO.File]::WriteAllLines($tmpfile, $s, [Text.Encoding]::GetEncoding('GB2312'));
复制代码 这是上面这批处理运行后所显示的内容: 运行所显示出来的是查找3101DF05所在的文件名和路径。
[2022-11-13 10:40:20]C:\oud\traces\AP\637059140efe9889022951
C:\oud\traces\AP\637059140efe9889022951\637059140efe9889022951.TU.20221113-104020.xml
请按任意键继续. . .
我想达到的效果是运行后所显示的第二行文件名及路径这个文件里面的3101DF05及后面的8个字符。
大概说一下代码里面的内容:在C:\oud\traces目前下的AC、ADS、AP三个文件夹内寻找最新时间创建的文件夹。
在最新时间创建的文件夹下查找XML文件里所包含的字符"3101DF05”。
(把C:\oud\traces下最新创建的乱码文件夹下的所有文件及C:\AWRoot\dtwr\stcapi\home\temp下所有的文件,复制到在当前桌面创建一个当前日期和时间的文件夹内。)
注:括号内的功能我不需要了。。另外一个程序需要用到。 |