批处理中如何去除含.txt文件的文件夹路径末尾反斜杠?
解决批处理输出文件夹路径去除末尾反斜杠的问题
我明白你现在的需求:通过for /r遍历所有.txt文件并输出它们所在的文件夹路径,但默认输出的路径末尾带有反斜杠,想要去掉这个多余的符号对吧?下面给你几个可行的解决方案,分命令行直接运行和批处理文件两种场景:
方案1:命令行直接运行(临时启用延迟扩展)
直接在命令提示符里执行这条命令就行,不需要写批处理文件:
for /r %i in (*.txt) do @set "folder=%~dpi" && @cmd /v:on /c "echo !folder:~0,-1!"
原理说明
set "folder=%~dpi":把当前文件所在的带反斜杠的路径赋值给变量foldercmd /v:on /c "echo !folder:~0,-1!":临时启用延迟扩展(/v:on),然后用字符串截取语法!folder:~0,-1!去掉变量最后一个字符(也就是末尾的反斜杠)
方案2:写在批处理文件里(使用延迟扩展)
如果要把逻辑保存成.bat文件,用这个写法:
@echo off setlocal enabledelayedexpansion for /r %%i in (*.txt) do ( set "folder=%%~dpi" echo !folder:~0,-1! ) endlocal
原理说明
setlocal enabledelayedexpansion:开启延迟扩展,这样在for循环内部可以用!变量!来实时获取变量的最新值(如果用%变量%的话,批处理会提前解析整个循环块,导致值不更新)%%~dpi:批处理文件里的变量要写两个百分号,~dpi表示提取文件的驱动器号+完整路径!folder:~0,-1!:截取变量folder的从第0位开始到倒数第2位的内容,也就是去掉最后一个反斜杠
方案3:批处理文件里用子程序(无需延迟扩展)
如果你不习惯用延迟扩展,也可以用子程序的方式来处理:
@echo off for /r %%i in (*.txt) do call :remove_backslash "%%~dpi" goto :eof :remove_backslash set "input_path=%~1" echo %input_path:~0,-1% goto :eof
原理说明
call :remove_backslash "%%~dpi":把带反斜杠的路径作为参数传给名为remove_backslash的子程序%~1:提取子程序的第一个参数(去掉引号)%input_path:~0,-1%:同样用字符串截取去掉末尾的反斜杠,因为在子程序里变量是独立解析的,不需要延迟扩展
这几个方案都能完美去掉路径末尾的反斜杠,你可以根据自己的使用场景选择~
内容的提问来源于stack exchange,提问作者Ahmad Ismail
相关产品推荐
相关产品推荐

