level 1
求助:需要将一个文件夹里面所有.txt文件中的固定字符O001替换为O3001,O3002……O3999
2021年09月17日 13点09分
1
level 9
不清楚你的实际文件/情况,仅以问题中的说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI,跟要处理的文件放一起双击运行
<# :
cls&echo off&mode con lines=5000
rem 将当前目录里的所有txt文本文件内的指定字符串内容替换成其他指定内容
set #=Any question&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
cd /d "%~dp0"
powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312')))) -Args '%~f0'"
title %#% +%$%%$%/%_% %z%
pause
exit
#>
$oldword="O001";
$newword=@(13001..13999|%{'O'+$_.toString().Substring(1)}) -join ',';
$codes=@'
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
public static class ExpDir
{
[DllImport("Shlwapi.dll", CharSet=CharSet.Unicode)]
public static extern int StrCmpLogicalW(string p1, string p2);
public static string[] Sort(string[] f)
{
Array.Sort(f, StrCmpLogicalW);
return f;
}
}
'@;
Add-Type -TypeDefinition $codes;
$self=get-item -liter $args[0];
$path=$self.Directory.FullName;
$arr=@(dir -liter $path|?{('.txt' -eq $_.Extension) -and ($_ -is [System.IO.FileInfo])}|%{$_.Name});
if($arr.length -ge 1){
$files=[ExpDir]::Sort($arr);
$enc=[Text.Encoding]::GetEncoding('GB2312');
for($i=0;$i -lt $files.count;$i++){
write-host $files[$i];
$text=[IO.File]::ReadAllText($files[$i],$enc);
$text=$text.replace($oldword,$newword);
[IO.File]::WriteAllText($files[$i],$text,$enc);
}
}
2021年09月17日 15点09分
4