如何去除文本文件名中的空格?文件名含空格无法写入目标路径
解决批处理中含空格文件名无法写入及去除文件名空格的问题
原脚本的核心问题是输出路径未用双引号包裹,导致带空格的文件名被CMD解析为多个参数,最终写入失败。同时要实现去除文件名空格的需求,可通过批处理的变量替换功能完成。
以下是修改后的完整脚本:
@ECHO off TITLE (c) ASDG SETLOCAL EnableDelayedExpansion SET locationPath=C:\Textfiles\ SET destinationPath=E:\Textfiles\ SET status=success SET countMetadata=0 SET countPDF=0 SET countJPEG=0 ECHO Executing the program... FOR /R "%locationPath%" %%g IN (*.txt) DO ( REM 切换到文件所在目录(带空格的路径必须用引号) CD /D "%%~dpg" IF EXIST "%%~nxg" ( REM 处理文件内容,写入目标路径时用无空格文件名 SET "fileNameNoSpaces=%%~nxg" REM 替换文件名中的空格为空 SET "fileNameNoSpaces=!fileNameNoSpaces: =!" FOR /F "skip=1 tokens=1* delims=|" %%a IN ("%%~nxg") DO ( SET /a countMetadata+=1 REM 用带引号的路径和处理后的无空格文件名写入 ECHO %%~dpa%%a^| %%b >> "%destinationPath%!fileNameNoSpaces!" ) IF !status! == success ( ECHO %%g has been successfully added REM 日志写入同样用带引号的路径 ECHO %%g >> "%destinationPath%logs.txt" ) ) ) ENDLOCAL
关键修改说明:
- 路径包裹双引号:所有涉及文件/目录路径的地方(如
FOR /R "%locationPath%"、CD /D "%%~dpg"、IF EXIST "%%~nxg"、输出重定向的路径)都用双引号包裹,避免空格被解析为参数分隔符。 - 去除文件名空格:通过
SET "fileNameNoSpaces=!fileNameNoSpaces: =!"实现变量替换,将文件名中的空格替换为空字符串。这里必须启用EnableDelayedExpansion,才能在循环中实时更新变量值。 - 延迟扩展变量引用:循环中引用处理后的文件名时用
!fileNameNoSpaces!而非%fileNameNoSpaces%,确保每次循环都能获取最新的变量值。 - 修复原脚本冗余判断:原脚本中
IF EXIST *.txt*会匹配所有带txt后缀的文件,改为IF EXIST "%%~nxg"更精准,只判断当前遍历到的文件是否存在。
内容的提问来源于stack exchange,提问作者ADRIAN DE GUINTO
相关产品推荐
相关产品推荐

