如何通过命令提示符或批处理获取不含括号内内容的文件与文件夹列表
没问题,我来帮你搞定这个需求!要在命令提示符或批处理里实现去掉文件名/文件夹名中的括号及内部内容,咱们可以用批处理脚本结合字符串替换来完成,下面给你两种实用的方法:
方法一:处理所有括号(支持文件名多对括号)
创建一个名为CleanNames.bat的批处理文件,把下面的代码复制进去:
@echo off setlocal enabledelayedexpansion :: 遍历当前目录下的所有文件和文件夹(如果只需要文件夹,加上/ad参数即可,比如dir /b /ad) for /f "delims=" %%a in ('dir /b') do ( set "name=%%a" :: 循环清理所有括号及内部内容,直到没有括号为止 :cleanLoop if "!name:(*)=!" neq "!name!" ( set "name=!name:(*)=!" goto cleanLoop ) :: 清理括号残留的多余空格 set "name=!name: = !" :: 输出处理后的名称,也可以改成>> cleaned_names.txt保存到文件 echo !name! ) endlocal
代码解释:
setlocal enabledelayedexpansion:开启延迟变量扩展,保证循环里修改的变量能实时生效,这是批处理循环里处理变量的必备操作。for /f "delims=" %%a in ('dir /b'):遍历dir /b输出的每一项文件名/文件夹名,delims=确保文件名带空格时也能完整读取。!name:(*)=!:批处理的字符串替换语法,直接把(...)格式的内容替换为空;因为一次只能处理第一个括号,所以用cleanLoop循环来处理所有括号。- 最后的空格处理:把连续的两个空格替换成一个,避免括号前后的空格残留(比如原名称里的
Dual Red会变成Dual Red)。
方法二:仅处理单个括号(简化版)
如果你的文件名里只有一对括号,那可以简化脚本,去掉循环部分:
@echo off setlocal enabledelayedexpansion for /f "delims=" %%a in ('dir /b') do ( set "name=%%a" set "name=!name:(*)=!" set "name=!name: = !" echo !name! ) endlocal
测试你的示例输入
原输入的文件/文件夹名:
Lenovo 48394 Dual (48437873) Red、Lenoxx smoth 3030 (1545308)、Logitech razer 220 (04948393)、Microsoft V-3000x (4837483449) Black
运行脚本后会输出:
- Lenovo 48394 Dual Red
- Lenoxx smoth 3030
- Logitech razer 220
- Microsoft V-3000x Black
完全符合你的需求!如果需要把结果保存到文件,只需要把echo !name!改成echo !name! >> cleaned_names.txt就行。
内容的提问来源于stack exchange,提问作者Ricardo Bohner
相关产品推荐
相关产品推荐

