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

news/2025/3/22 1:08:02/文章来源:https://www.cnblogs.com/wutou/p/18230362

前言全局说明

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 是 系统、隐藏 属性导致,结果,去掉也没效果
经过累计一天左右时间,各种尝试,都未能解决。
但某次运行时,无意发现,打印提示路径中有个^,正常转义符不是不显示么,显示了,说明被当成路径的一部分了。
想起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 >nulREM :: 正确转义路径中的空格和括号
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 >nulset b1=D:\temp\aa (2)\desktop.iniecho.
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 >nulset 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






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




参考、来源:



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/719787.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

导出谷歌地图提供的各类地图可视化样式的方法

本文介绍在谷歌地图API(Google Maps APIs)中,设计地图样式并将设计好的样式通过JSON或URL导出的方法~本文介绍在谷歌地图API(Google Maps APIs)中,设计地图样式并将设计好的样式通过JSON或URL导出的方法。首先,进入Google Maps APIs网站。在弹出的窗口中我们可以看到,目…

雷池WAF-动态防护新功能体验

雷池WAF 雷池WAF(Web Application Firewall,网络应用防火墙)是由长亭科技开发的一个网络安全产品,它专注于保护Web应用免受黑客攻击。 今天主要讲的是长亭雷池最近新出的功能:动态防护安装 雷池WAF支持多种安装方式:sh脚本安装、离线安装、牧云助手安装 本篇文章以牧云助…

OpenCloudOS 助力趣丸科技降本增效,容器化高效运行

导读:趣丸科技,一家集兴趣社交、电子竞技、人工智能于一体的创新型科技企业,在采用 OpenCloudOS 开源操作系统后,结合业务特点将容器化集群平均利用率提高到 40% 左右,高峰利用率达 80% ,降本增效的同时,满足了不断增长的业务需求。本文将介绍 OpenCloudOS 在趣丸科技的…

为什么你的RAG不起作用?失败的主要原因和解决方案

无数企业正在尝试使用检索增强生成(RAG),但在制作这些系统达到生产质量时普遍会感到失望。因为他们的RAG不仅运行效果差,而且对于如何改进和如何进行后续的工作也感到十分的迷茫。 其实阻碍RAG系统的一个关键因素是语义不协调,这是由于任务的预期含义、RAG的理解以及存储的…

铁威马T系列NAS企业优季:办公利器,六折钜惠来袭!

众所周知,现如今企业对于数据存储和管理的需求日益增长,为满足广大企业用户的实际需求,恰逢6.18,铁威马特别推出T系列NAS(网络附加存储)企业特惠季活动,以低至六折的优惠价格,让您轻松拥有高效、稳定的办公利器。 一、铁威马T系列NAS:性能卓越,稳定可靠 铁威马T系列N…

腾讯云API网关废了?集群开源方案平替

前言:一则公告背景:某云API网关要跑路啦 听过腾讯云API网关要下线了,之前的项目都(bu)是(shi)用的这个,现在要换成什么呢? 【重要】API 网关产品停止售卖公告 这玩意当年我还在白嫖腾讯云k8s master集群的时候, 某一次升级之后他们把k8s的service 切成了API网关, 然…

.NET Core Configuration 配置项知识点一网打尽!

控制台项目中,演示示例1.自定义 Dictionary Config 内存字典模式 dotnet add package Microsoft.Extensions.ConfigurationIConfigurationBuilder builder = new ConfigurationBuilder(); builder.AddInMemoryCollection(new Dictionary<string, string>() {{"key…

梵几 x TapData:如何高效落地实时数据中台,助力家居企业优化数字营销

面对业务拓展带来的数据需求,梵几家具采用分布式数据中心+数据中台的方案,并由 TapData Cloud 作为数据同步组件。本文将探索如何利用该方案实现高效的数据管理和业务运营,完善数字化能力,提升运营效率和客户体验。使用 TapData,化繁为简,摆脱手动搭建、维护数据管道的诸…

mac 安装和管理多个Python版本

更新brewbrew updatebrew install pyenv 安装pyenv报错==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-core/c1c28c143f4e28fc0059e66baa904104da25a41d/Formula/o/openssl@3.rb curl: (7) Failed to connect to raw.githubusercontent.com port 443…

CAD .net 二次开发 PaletteSet取消允许固定

今天在使用PaletteSet的时候偶然发现一个与预期不符的情况 我需要一个用鼠标拖动到侧边不会自动贴靠在CAD侧边(或其他边)的PaletteSet,于是我将PaletteSet的Dock和DockEnabled属性设置为DockSides.None 示例代码如下: 但是当我打开cad执行此段代码之后,我发现我的面板仍然可…

AutoCAD .net 二次开发 PaletteSet取消允许固定

今天在使用PaletteSet的时候偶然发现一个与预期不符的情况 我需要一个用鼠标拖动到侧边不会自动贴靠在CAD侧边(或其他边)的PaletteSet,于是我将PaletteSet的Dock和DockEnabled属性设置为DockSides.None 示例代码如下: 但是当我打开cad执行此段代码之后,我发现我的面板仍然可…