如何为目录及子目录中的.docx文件批量生成同名空.txt文件?
需求说明
我有一个包含大量子文件夹的目录,其中存有冗余的.docx文件。希望扫描整个目录(包含所有子文件夹),每当找到一个.docx文件时,在该文件的同一位置创建一个同名的空.txt文件,后续我将手动转移这些.docx文件。
示例
原文件结构
C:\directory\file1.docx C:\directory\subdir\file2.docx
执行操作后结构
C:\directory\file1.docx C:\directory\file1.txt C:\directory\subdir\file2.docx C:\directory\subdir\file2.txt
遇到的问题
我尝试修改了一段PowerShell脚本:
Get-ChildItem -Path "C:\Temp" -Recurse -File |Where-Object {$_.Extension -ne '.txt'} |ForEach-Object { [System.IO.File]::WriteAllText("C:\Temp" + $_.BaseName + ".txt", $_.FullName) }
但无法实现两个核心需求:
- 在原
.docx文件的同一位置创建.txt文件 - 生成的
.txt文件为空
解决方案
PowerShell 方案
用以下脚本即可满足需求:
Get-ChildItem -Path "C:\你的目标目录路径" -Recurse -File -Filter "*.docx" | ForEach-Object { $txtFilePath = Join-Path -Path $_.DirectoryName -ChildPath "$($_.BaseName).txt" New-Item -Path $txtFilePath -ItemType File -Force }
关键说明
-Filter "*.docx":精准筛选.docx文件,避免处理其他类型文件Join-Path:安全拼接原文件的目录路径和目标.txt文件名,避免手动拼接路径时出现格式错误New-Item:默认创建空文件,完全符合需求-Force:如果目标位置已存在同名.txt文件,会直接覆盖;不需要覆盖的话可以去掉这个参数
批处理(Batch)方案
如果偏好使用批处理,可执行以下命令:
@echo off for /r "C:\你的目标目录路径" %%f in (*.docx) do ( type nul > "%%~dpnf.txt" )
关键说明
for /r:递归遍历指定目录下的所有.docx文件%%~dpnf:自动提取.docx文件的目录路径、文件名(不含扩展名),拼接.txt后就是目标空文件的完整路径type nul >:快速创建空文件
内容的提问来源于stack exchange,提问作者Ninjalope
相关产品推荐
相关产品推荐

