PowerShell批量处理TXT文件时如何保留原文件名保存?
批量打乱TXT文件内容并覆盖原文件的PowerShell修正代码
你的批量处理代码存在两个核心问题:
- 直接用
Get-Content -Path C:\Folder1\*.txt -Raw会把所有TXT文件的内容合并后再打乱,最终输出的是所有文件内容的混合结果,而非逐个处理单个文件 Out-File -FilePath C:\Folder1\-W是错误语法,-W不是合法参数,也未指定正确的输出文件路径
以下是修正后的代码,实现逐个处理文件夹内所有TXT文件,打乱内容后覆盖原文件:
Get-ChildItem -Path C:\Folder1\*.txt | ForEach-Object { # 读取当前文件的完整内容 $originalContent = Get-Content -Path $_.FullName -Raw # 按空白符分割内容、随机排序后重新拼接 $shuffledContent = ($originalContent -split "\s+" | Sort-Object { Get-Random }) -join ' ' # 将打乱后的内容写回原文件(覆盖) $shuffledContent | Out-File -FilePath $_.FullName -Encoding Default }
关键说明:
Get-ChildItem遍历目标文件夹下的每个TXT文件,确保逐个处理$_.FullName获取当前文件的完整路径,保证读取和写入的是同一个文件- 添加
-Encoding Default是为了避免默认编码(UTF-16)导致的乱码问题,可根据文件实际编码调整(比如-Encoding UTF8) - 若想保留原文件的行结构(只打乱每行的顺序,而非所有内容的单词顺序),可修改逻辑为按行分割:
Get-ChildItem -Path C:\Folder1\*.txt | ForEach-Object { $originalLines = Get-Content -Path $_.FullName $shuffledLines = $originalLines | Sort-Object { Get-Random } $shuffledLines | Out-File -FilePath $_.FullName -Encoding Default }
注意:处理前建议先备份所有TXT文件,避免内容意外丢失。
内容的提问来源于stack exchange,提问作者Hellena Crainicu
相关产品推荐
相关产品推荐

