首页 > 系统相关 >Windows bat批处理特殊符号路径处理()圆括号、空格

Windows bat批处理特殊符号路径处理()圆括号、空格

时间:2024-06-04 12:22:02浏览次数:18  
标签:bat set 双引号 Windows 路径 echo ini b3% 特殊符号

前言全局说明

Windows bat批处理特殊符号路径处理()圆括号、空格
遇到特殊符号路径报 \ was unexpected at this time. 错误


一、说明

环境:

版本:Windows 11 家庭版
版本:23H2
操作系统版本:22631.3593

二、带括号的路径

2.1 目的:

判断,路径下 D:\temp\aa^(1^)\desktop.ini 的 ini 文件是否存在。

2.2 源码

文件名:ai_kimi_a1.bat

@echo off
chcp 65001 >nul

:: 正确转义路径中的空格和括号
set b1=D:\temp\aa^(1)\
:: 确保文件名使用双引号,如果文件名没有特殊字符则这样即可
set "b2=desktop.ini"
:: 使用双引号正确拼接路径和文件名
set "b3=%b1%%b2%"

echo.
echo Checking for "%b3%"...
if exist "%b3%" (
    echo File "%b3%" found.
) else (
    echo File "%b3%" not found.
)
echo.

运行结果:
image

2.3 总结:

1.路径中,文件(夹)名字有特殊符号的,用到转义时,外层不要用双引号包裹,否则会把转义符识别成路径的一部分。
2.转义括号时,^(1) 和 (1) 效果一样

2.4 踩坑记录:

2.4.1 是否字符集问题?

当时考虑过是否是字符集的问题,因为使用的脚本是之前在WIN7上创建的,右下角显示ANSI,加上 chcp 65001 也没解决;
又在 WIN11 下,重新创建bat文件,也未能解决问题

2.4.2 路径单\改成双\\

根据错误AI提示,路径可能需要将单斜杠改成双斜杠,这个和 Windows Python 编写设置路径时一样,
D:\temp\aa(1)\ --> D:\\temp\\aa(1)\\
但在批处理中未能有效。

2.4.3 双引号包裹路径

遇到路径有特殊符号,都知道用转义,结果当时就写成 set "b1=D:\temp\aa^(1^)" 这样,
路径用双引号包裹,而且ai也是这样提示的。
但是,此时问题是,明明路径下 desktop.ini 存在,但 if 的 exist 判断路径不存在。
以为是 文件属性原因,desktop.ini 是 系统、隐藏 属性导致,结果,去掉也没效果
又以为是 变量名过长导致的,结果查询AI提示变量名长度255,也不是这个原因
经过累计一天左右时间,各种尝试,都未能解决。
但某次运行时,无意发现,打印提示路径中有个^,正常转义符不是不显示么,显示了,说明被当成路径的一部分了。
想起shell里的用法,是不是 双引号导致的? 去掉双引号后,路径判断就正确了
image


三、带空格和括号的路径

3.1 目的:

判断,路径下 D:\temp\aa\ (2)\desktop.ini 的 ini 文件是否存在。

3.2 源码

文件名:ai_kimi_a2.bat

@echo off
chcp 65001 >nul

:: 正确转义路径中的空格和括号
set b1=D:\temp\aa (2)\
:: 确保文件名使用双引号,如果文件名没有特殊字符则这样即可
set "b2=desktop.ini"
:: 使用双引号正确拼接路径和文件名
set "b3=%b1%%b2%"

echo.
echo Checking for "%b3%"...
if exist "%b3%" (
    echo File "%b3%" found.
) else (
    echo File "%b3%" not found.
)

运行结果:
image

3.3 总结:

  1. 又经过测试发现,就算路径有空格、圆括号特殊字符,只要不用双引号包裹,就能正常使用。和 shell 完全想反。

四、路径结尾单反斜杠是否影响

4.1 目的:

判断,路径下 D:\temp\aa\ (2)\desktop.ini 的 ini 文件是否存在。

4.2 源码

文件名:ai_kimi_a2.bat

@echo off
chcp 65001 >nul

REM :: 正确转义路径中的空格和括号
set b1=D:\temp\aa (2)
:: 确保文件名使用双引号,如果文件名没有特殊字符则这样即可
set "b2=desktop.ini"
:: 使用双引号正确拼接路径和文件名
set "b3=%b1%\%b2%"

echo.
echo Checking for "%b3%"...
if exist "%b3%" (
    echo File "%b3%" found.
) else (
    echo File "%b3%" not found.
)

运行结果:
image

4.3 总结:

b1 变量结尾的 \ 写到 b3 里,能正常运行


五、写绝对路径:

5.1 目的:

判断,路径下 D:\temp\aa\ (2)\desktop.ini 的 ini 文件是否存在。

5.2 源码

文件名:ai_kimi_a2.bat

@echo off
chcp 65001 >nul

set b1=D:\temp\aa (2)\desktop.ini

echo.
echo Checking for "%b1%"...
if exist "%b1%" (
    echo File "%b1%" found.
) else (
    echo File "%b1%" not found.
)

运行结果:
image

5.3 总结:

不用变量拼接时,直接写成绝对路径的,不用管路径是否有特殊符号,直接判断出正确结果


六、输出时的双引号

6.1 目的:

判断,路径下 D:\temp\aa\ (2)\desktop.ini 的 ini 文件是否存在。

6.2 源码

文件名:ai_kimi_a5.bat

@echo off
chcp 65001 >nul

set b1=D:\temp\aa (2)\
set "b2=desktop.ini"
set "b3=%b1%%b2%"

echo.
echo Checking for "%b3%"...
if exist "%b3%" (
    echo [ info ] File %b3% found.
) else (
    echo [ ERR ] File "%b3%" not found.
)

把 if 里 echo File %b3% found. 行 %b3% 两边的 双引号去掉了。运行时提示错。

运行结果:
image

6.3 总结:

1.在输出时报错,以为是 [] 方括号导致的,但转义后,并没有效果。
2.观察到错误,只显示了文件名名,说明路径又被截断了,所以在输出时 %b3% 要加上双引号了

image






免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。




参考、来源:



标签:bat,set,双引号,Windows,路径,echo,ini,b3%,特殊符号
From: https://www.cnblogs.com/wutou/p/18230362

相关文章

  • Syhunt Hybrid 7.0 (Windows) - 应用程序混合增强分析 (HAST)
    SyhuntHybrid7.0(Windows)-应用程序混合增强分析(HAST)SyhuntHybrid创新地融合了全面的静态和动态安全扫描请访问原文链接:https://sysin.org/blog/syhunt-hybrid/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgSyhuntHybrid获取深入的漏洞评估结果使用......
  • springboot集成mybatis
    springboot集成mybatis1,整体结构2,需要的依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>......
  • Windows上Qt开发环境搭建
    Windows上Qt开发环境搭建Qt是一种跨平台的C++应用程序开发框架,由QtCompany开发和维护。它提供了丰富的工具和库,用于开发图形用户界面(GUI)应用程序、网络应用程序和嵌入式应用程序。Qt具有以下特点:跨平台性:Qt可以在多个操作系统上运行,包括Windows、macOS、Linux、Andro......
  • 关闭华为手机连接windows自动弹出的驱动助手
    关闭华为手机连接windows自动弹出的文件夹驱动助手手机连接电脑充电,Windows自动弹出驱动助手,类似文件管理的文件夹,每次都要关掉,忍不住吐槽实在是太烦了关掉类似文件管理的文件夹关闭服务法在“我的电脑”或“此电脑”上右键点击,选择“管理”。在打开的“计算机管理”......
  • 02windows系统查看当前目录下文件夹大小
      #运行powershell复制下面命令执行Get-ChildItem-Directory|ForEach-Object{$folder=$_$totalSize=(Get-ChildItem-Path$folder.FullName-Recurse|Measure-Object-PropertyLength-Sum).Sum$sizeInGB="{0:N2}"-f($totalSiz......
  • Windows 隐式加载任意目录下动态库的方法
    windows平台下,dll的加载方式分为显式加载和隐式加载。隐式加载需要在程序链接期间指定依赖库的名称、路径等信息,程序运行时由系统自动进行处理;显式加载则是直接调用系统APILoadLibrary/FreeLibrary来加载或卸载dll模块。通常情况下,这两种方式可以处理绝大多数的应用需求。......
  • windows下python源码编译构建grpc【填各种坑】
    背景首先这是巨坑,pipinstallgrpcio和pipinstallgrpcio_tools的方式,因为公司的库里没有,且申请入库复杂,因此只能通过源码构建。思路第一步,应该是要去找grpc的源码,公司是有源码的,也可以在PIPY上找,比如我需要1.41.1的grpc版本,就如下地址https://pypi.org/project/......
  • 在 Windows 10 中全局安装 tree 命令
    在Windows10中全局安装tree命令的步骤如下:1.下载TreeforWindows工具包。可以从官方网站https://gnuwin32.sourceforge.net/packages/tree.htm下载最新版本的Binaries.zip压缩包。2.解压下载的Binaries.zip压缩包。在解压后的文件夹中,找到bin目录,里面有一个......
  • MyBatis实现MySQL表字段及结构的自动增删
    前言在开发过程中,总会涉及到数据库表结构字段的增加或者删除,或者是索引的增加和减少,这个时候能把修改表结构字段这些工作都交给程序来进行,那能大大方便开发。正好有一个现成的工具可以在springboot里面实现这个流程。介绍mybatis-enhance-actable上述是gitee链接。这个工具是m......
  • 更改Windows11/10自带的微软拼音输入法的“候选词字体”
    候选字体开启半全角切换快捷键自定义短语自定义短语符号名称符号快捷短语引号「」yh单引号『』yh全角空格×2  kk叉(乘号)×cha六角括号〔〕ljkh超级管理员默认用户名administratoradmin......