

标签:Windows CMD 批量修改后缀名、PowerShell 改扩展名、文件重命名脚本
我一直以为改文件后缀这种事,在 Windows 上只要一个 for 循环就能搞定,直到那天我在 PowerShell 里贴了个 CMD 命令,结果直接报错给我看……
这才发现,原来 CMD 和 PowerShell 根本不是一个语法体系!
现在就把我实际踩坑后的解决方案写下来,一次性搞定 Windows 批量修改文件后缀名,以后再也不怕手动改一堆 .txt 了。
假设当前目录下有这些文件:
说明.txt
待办.txt
日记.txt我们要把这些改成:
说明.md
待办.md
日记.mdWin + R 输入 cmd 回车;for %f in (*.txt) do ren "%f" "%~nf.md"执行完之后,所有 .txt 文件都会变成 .md,文件名保持不变。
如果你想把这条命令写到 .bat 脚本里,就需要双写百分号:
for %%f in (*.txt) do ren "%%f" "%%~nf.md"当你在 PowerShell 粘贴 for %f in (*.txt) 时,很可能会遇到:
关键字“for”后面缺少左“(”。没错,这就是语法不兼容导致的。
如果你用的是 PowerShell(右键目录 -> 在此处打开 PowerShell),那么正确的命令是:
Get-ChildItem -Filter *.txt | Rename-Item -NewName { $_.BaseName + ".md" }Get-ChildItem -Filter *.txt:获取所有 .txt 文件;Rename-Item:改名字;{ $_.BaseName + ".md" }:保留文件名,只改扩展名。说明.txt → 说明.md
待办.txt → 待办.md
日记.txt → 日记.md比如同时把 .log 和 .bak 文件都改成 .txt,你可以组合两条命令一起写:
Get-ChildItem -Filter *.log | Rename-Item -NewName { $_.BaseName + ".txt" }
Get-ChildItem -Filter *.bak | Rename-Item -NewName { $_.BaseName + ".txt" }别小看这个批量改名操作,我以前做博客迁移、Markdown 批量处理,几百个文件一个个手动改后缀真的会崩溃。有了这两种命令方式,不管你是习惯用 CMD 还是 PowerShell,都能轻松应对。
如果你有类似文件处理的批量需求,欢迎留言,我可以把这些命令封装成 .bat 或 PowerShell 脚本打包好发你,效率拉满。
@echo off
for %%f in (*.txt) do ren "%%f" "%%~nf.md"
echo 所有 txt 文件已成功改成 md!
pause如果你觉得这篇文章有帮助,记得点赞收藏,下次再找就方便多了!