标题: [文本处理] 批处理被困扰的路径中的特殊字符 [打印本页]
作者: lixiaoxiao 时间: 2022-2-23 21:57 标题: 批处理被困扰的路径中的特殊字符
大佬们好!我在使用批处理获取用户传给的路径时,有的路径带 () & 还有的是 空格 加了双引号,有的没有加,让我很是无奈,有什么方法处理吗?
就比如- :start
- set /p path=请输入路径:
- if "%a%" =="" echo 路径为空,请重新输入 && goto start
复制代码
此时如果给定的路径是 带 双引号的,这里的判断就报错了
不过我倒是想着 使用 for %%~i 先把 双引号去除,在全程使用 path 变量时在前后加 双引号
但对于上述的 特殊符号怎么处理?是否还有其他需要注意的特殊符号呢?
因我之前是使用python的,对 bat 的语法总是不能适应,就像上面那个 if 判断, 变量内的双引号咋就影响到 if 判断呢?不知该怎么理解呢?
作者: Echo11 时间: 2022-2-24 11:07
本帖最后由 Echo11 于 2022-2-24 11:14 编辑
不过我倒是想着 使用 for %%~i 先把 双引号去除,在全程使用 path 变量时在前后加 双引号
就你说的这么做不就好了么?
1、如果你是从 命令行 传参进来的- if "%~1"=="" echo 路径为空...pause>nul&exit
- ECHO.路径为:"%~1"
复制代码
我一般存储路径变量的时候不带""号,等实际使用时一律加"",避免有空格。
2、如果是用Set /P获得路径- @ECHO off
- :start
- set "mypath="
- set /p mypath=请输入路径:
- set mypath=%mypath:"=%
- set mypath=%mypath:"=%
- REM 注意:以上替换就是要两遍,不要以为是多写了一行
- if "%mypath%"=="=" ECHO.路径为空,请重新输入 & goto :start
-
- ECHO.输入的路径为:%mypath%
- pause>nul
- EXIT
复制代码
我试验了这些数据都正常- 正常输入
- C:\dir\my book\book1
- "C:\dir\my book\book1"
- 错误输入
- "C:\dir\my book\book1
- C:\dir\my book\book1"
- (直接敲回车)
复制代码
作者: 路过 时间: 2022-2-24 11:33
批处理的预处理机制作怪,开变量延迟解决- setlocal enabledelayedexpansion
-
- :start
- set /p a=请输入路径:
- if "!a!" =="" echo 路径为空,请重新输入 && goto start
复制代码
作者: lixiaoxiao 时间: 2022-2-25 13:56
我测试 如果路径中包含 & 号,还是不能正常
作者: qixiaobin0715 时间: 2022-2-25 14:04
如何不正常?
作者: lixiaoxiao 时间: 2022-2-25 14:16
好吧,我测试出来了,echo 的时候 需要把 path 变量前后加上双引号 才能正常输出
是否可以总结为,得到一个路径时,第一,先把前后的 " 去除了。
之后使用时,在路径变量 前后加上 “ ,这样其他的 特殊字符也都正常了?
作者: qixiaobin0715 时间: 2022-2-25 14:34
我测试情况如下,没有问题啊:- C:\Users\Administrator\Desktop\test1>type test.bat
- @echo off
- setlocal enabledelayedexpansion
-
- :start
- set /p a=请输入路径:
- if "!a!" =="" echo 路径为空,请重新输入 && goto start
- echo,!a!
- pause>nul
- C:\Users\Administrator\Desktop\test1>test.bat
- 请输入路径:"C:\dir\my& book\book1"
- "C:\dir\my& book\book1"
-
- C:\Users\Administrator\Desktop\test1>
复制代码
作者: lixiaoxiao 时间: 2022-2-25 14:50
好吧,我没有使用 延时变量,因为我从 文档里获取内容时,会导致 ! 丢失,不清楚是否还有其它副作用。主要也是我初学批处理,水平太菜,不清楚到底都有那些特殊情况需要注意
作者: lixiaoxiao 时间: 2022-2-25 21:05
我又遇到一个问题,我想让批处理支持 拖放,但如果路径包含特殊字符,仍然不行啊,比如 路径带有 &
当 echo "%1" 就能看到在 & 处被截断了
作者: lixiaoxiao 时间: 2022-2-25 21:06
但是如果直接通过 set /p mypath=balabalabala 就能正常
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |