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

[文本处理] 批处理被困扰的路径中的特殊字符

[复制链接]
发表于 2022-2-23 21:57:35 | 显示全部楼层 |阅读模式
大佬们好!我在使用批处理获取用户传给的路径时,有的路径带 () & 还有的是 空格 加了双引号,有的没有加,让我很是无奈,有什么方法处理吗?

就比如
  1. :start
  2. set /p path=请输入路径:
  3. if "%a%" =="" echo 路径为空,请重新输入 && goto start
复制代码
此时如果给定的路径是 带 双引号的,这里的判断就报错了

不过我倒是想着 使用 for %%~i 先把 双引号去除,在全程使用 path 变量时在前后加 双引号

但对于上述的 特殊符号怎么处理?是否还有其他需要注意的特殊符号呢?

因我之前是使用python的,对 bat 的语法总是不能适应,就像上面那个 if 判断, 变量内的双引号咋就影响到 if 判断呢?不知该怎么理解呢?
发表于 2022-2-24 11:07:41 | 显示全部楼层
本帖最后由 Echo11 于 2022-2-24 11:14 编辑
不过我倒是想着 使用 for %%~i 先把 双引号去除,在全程使用 path 变量时在前后加 双引号

就你说的这么做不就好了么?
1、如果你是从 命令行 传参进来的
  1. if "%~1"=="" echo 路径为空...pause>nul&exit
  2. ECHO.路径为:"%~1"
复制代码
我一般存储路径变量的时候不带""号,等实际使用时一律加"",避免有空格。

2、如果是用Set /P获得路径
  1. @ECHO off
  2. :start
  3. set "mypath="
  4. set /p mypath=请输入路径:
  5. set mypath=%mypath:"=%
  6. set mypath=%mypath:"=%
  7. REM 注意:以上替换就是要两遍,不要以为是多写了一行
  8. if "%mypath%"=="=" ECHO.路径为空,请重新输入 & goto :start

  9. ECHO.输入的路径为:%mypath%
  10. pause>nul
  11. EXIT
复制代码
我试验了这些数据都正常
  1. 正常输入
  2. C:\dir\my book\book1
  3. "C:\dir\my book\book1"
  4. 错误输入
  5. "C:\dir\my book\book1
  6. C:\dir\my book\book1"
  7. (直接敲回车)
复制代码
发表于 2022-2-24 11:33:56 | 显示全部楼层
批处理的预处理机制作怪,开变量延迟解决
  1. setlocal enabledelayedexpansion

  2. :start
  3. set /p a=请输入路径:
  4. if "!a!" =="" echo 路径为空,请重新输入 && goto start
复制代码
 楼主| 发表于 2022-2-25 13:56:31 | 显示全部楼层
我测试 如果路径中包含 & 号,还是不能正常
发表于 2022-2-25 14:04:32 | 显示全部楼层
如何不正常?
 楼主| 发表于 2022-2-25 14:16:18 | 显示全部楼层
好吧,我测试出来了,echo 的时候 需要把 path 变量前后加上双引号 才能正常输出

是否可以总结为,得到一个路径时,第一,先把前后的 " 去除了。
之后使用时,在路径变量 前后加上 “ ,这样其他的 特殊字符也都正常了?
发表于 2022-2-25 14:34:00 | 显示全部楼层
我测试情况如下,没有问题啊:
  1. C:\Users\Administrator\Desktop\test1>type test.bat
  2. @echo off
  3. setlocal enabledelayedexpansion

  4. :start
  5. set /p a=请输入路径:
  6. if "!a!" =="" echo 路径为空,请重新输入 && goto start
  7. echo,!a!
  8. pause>nul
  9. C:\Users\Administrator\Desktop\test1>test.bat
  10. 请输入路径:"C:\dir\my& book\book1"
  11. "C:\dir\my& book\book1"

  12. C:\Users\Administrator\Desktop\test1>
复制代码
 楼主| 发表于 2022-2-25 14:50:24 | 显示全部楼层
好吧,我没有使用 延时变量,因为我从 文档里获取内容时,会导致 ! 丢失,不清楚是否还有其它副作用。主要也是我初学批处理,水平太菜,不清楚到底都有那些特殊情况需要注意
 楼主| 发表于 2022-2-25 21:05:43 | 显示全部楼层
我又遇到一个问题,我想让批处理支持 拖放,但如果路径包含特殊字符,仍然不行啊,比如 路径带有 &
当 echo "%1" 就能看到在 & 处被截断了
 楼主| 发表于 2022-2-25 21:06:36 | 显示全部楼层
但是如果直接通过 set /p mypath=balabalabala  就能正常
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 10:13 , Processed in 0.020075 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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