找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 20024|回复: 9

[其他] 【已解决】求助:去文件名空格.bat,命令语法不正确。

[复制链接]
发表于 2023-9-15 23:47:31 | 显示全部楼层 |阅读模式
本帖最后由 yyz219 于 2023-9-17 09:31 编辑

完美解决了:

::【文件名去空格(本目录全部)】
版本1:
@echo off
cls
echo.
echo.
echo                         【文件名去空格(本目录全部)】?
pause>nul 2>nul
cls
set "str= "
for /f "delims=" %%i in ('dir /b *.*') do (
set "var=%%i" & Setlocal Enabledelayedexpansion & ren "!var!" "!var:%str%=!" & endlocal)
exit

版本2:

@echo off
::【文件名去空格】【结尾不能有:exit 】
echo.
echo.
echo                         【文件名去空格(本目录全部)】?
pause>nul 2>nul
for %%f in (*) do call :r %%f
:r
set f=%* & ren "%f%" %f: =%



*********************************************
原来的问题:
::【去文件名空格】
@echo off
Setlocal Enabledelayedexpansion & set "str= "
for /f "delims=" %%i in ('dir /b *.*') do (set "var=%%i" & ren "%%i" "!var:%str%=!")
pause>nul 2>nul
*********************************************
运行后提示:命令语法不正确。(实际上:除了含!号的文件名不能够去空格外,普通文件名还是能够去空格的)

这是为什么?
********************************************************
原因已经查到了:是因为文件夹里面的文件名,有一个文件名字是!号开头的

就是不知道,应该怎样解决?谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-9-15 23:59:29 | 显示全部楼层
大概是ren "%%i" "!var:%str%=!")中的)被当成了ren的一部分
 楼主| 发表于 2023-9-16 00:56:41 | 显示全部楼层
大概是ren "%%i" "!var:%str%=!")中的)被当成了ren的一部分
Five66 发表于 2023-9-15 23:59


原因已经查到了:是因为文件夹里面的文件名,有一个文件名字是!号开头的

就是不知道,应该怎样解决?谢谢
发表于 2023-9-16 01:31:31 | 显示全部楼层
试试看看这样行不行吧
(批处理文件自身有空格好像也会被改名)

  1. @echo off
  2. set "str= "
  3. for /f "delims=" %%i in ('dir /b *.*') do (
  4. set "var=%%i"
  5. Setlocal Enabledelayedexpansion
  6. ren "!var!" "!var:%str%=!"
  7. endlocal
  8. )
  9. pause>nul 2>nul
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-9-16 08:08:06 | 显示全部楼层
试试看看这样行不行吧
(批处理文件自身有空格好像也会被改名)
Five66 发表于 2023-9-16 01:31



    我试一试先 谢谢
 楼主| 发表于 2023-9-16 08:12:19 | 显示全部楼层
试试看看这样行不行吧
(批处理文件自身有空格好像也会被改名)
Five66 发表于 2023-9-16 01:31



    成功了 再次感谢
发表于 2023-9-16 13:30:50 | 显示全部楼层
回复 4# Five66


排除自身-1.bat
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d') do (
  3.     if "%%i" neq "%~nx0" (
  4.         set "OldName=%%i"
  5.         setlocal enabledelayedexpansion
  6.         set "NewName=!OldName: =!"
  7.         if "!OldName!" neq "!NewName!" (
  8.             ren "!OldName!" "!NewName!"
  9.         )
  10.         endlocal
  11.     )
  12. )
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

发表于 2023-9-16 13:34:20 | 显示全部楼层
回复 4# Five66


排除自身-2.bat
  1. @echo off
  2. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /v /i /x /c:"%~nx0"') do (
  3.     set "OldName=%%i"
  4.     setlocal enabledelayedexpansion
  5.     set "NewName=!OldName: =!"
  6.     if "!OldName!" neq "!NewName!" (
  7.         ren "!OldName!" "!NewName!"
  8.     )
  9.     endlocal
  10. )
复制代码

评分

参与人数 1技术 +1 收起 理由
yyz219 + 1 乐于助人

查看全部评分

 楼主| 发表于 2023-9-16 18:24:24 | 显示全部楼层
回复  Five66


排除自身-2.bat
Batcher 发表于 2023-9-16 13:34



    非常感谢
 楼主| 发表于 2023-9-16 18:25:40 | 显示全部楼层
回复 7# Batcher


    再次感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:17 , Processed in 0.022933 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表