标题: [文本处理] 请问批处理如何在字符串替换表达式中,引用变量?[已解决] [打印本页]
作者: sanmaodo 时间: 2022-10-20 20:37 标题: 请问批处理如何在字符串替换表达式中,引用变量?[已解决]
本帖最后由 sanmaodo 于 2022-10-21 14:05 编辑
我知道下面的代码是可行的,将得到 ”111.txt“- set full="d:\aaa\111.txt"
- echo %full:d:\aaa\=%
复制代码
我的问题是,如何用变量来替代第二行中的 ”d:\aaa\“
像下的代码,不会正确返回,请问要如何修改?- set full="d:\aaa\111.txt"
- set path="d:\aaa"
- set path=%path%\
- echo %full:%path%=%
复制代码
感谢!
作者: hfxiang 时间: 2022-10-21 09:03
- set full="d:\aaa\111.txt"
- set "dp=d:\aaa\"
- call echo %%full:%dp%=%%
复制代码
作者: 77七 时间: 2022-10-21 09:17
刚开始学习,乱写的- @echo off & setlocal enabledelayedexpansion
- set "full=d:\aaa\111.txt"
- set "path=d:\aaa"
- set "path=%path%\"
- set "full=!full:%path%=!"
- echo %full%
- pause
复制代码
作者: Batcher 时间: 2022-10-21 09:28
回复 3# 77七
path系统默认的环境变量,不要用它作为自定义变量。
作者: sanmaodo 时间: 2022-10-21 10:14
感谢大家的帮助!代码现在工作正常。
作者: sanmaodo 时间: 2022-10-21 14:28
回复 2# hfxiang
抱歉,又遇到一个小问题,
我需要把代码放在注册表里,所以要写成一行,但返回不正确,请问又办法解决吗?- set full="D:\3m_script\tools\oscdimg.exe" && set "pd=D:\3m_script\tools\" && call echo %full:%pd%=%
复制代码
奇怪,在cmd窗口测试时,代码执行第一次,返回是错误的,再执行一次,返回又正确了。
作者: holley 时间: 2022-10-21 15:00
本帖最后由 holley 于 2022-10-21 15:02 编辑
回复 1# sanmaodo - @echo off
- set full="d:\aaa\111.txt"
- echo %full:d:\aaa\=%
-
- call :print %full%
-
- :print
- set fn=%~nx1
- echo %fn%
- set fp=%~dp1
- echo %fp%
-
- pause
复制代码
作者: hfxiang 时间: 2022-10-21 15:03
回复 6# sanmaodo
多条set指令建议分行写(set/a逗号分隔的除外),这样的结果比较稳定,写在一行里,会有许多不确定性
作者: holley 时间: 2022-10-21 16:44
翻来覆去没搞懂你要啥?
要这个?- @echo off&setlocal enabledelayedexpansion&for /f "delims=" %%a in ("D:\3m_script\tools\oscdimg.exe") do (echo.%%~nxa)
复制代码
作者: Batcher 时间: 2022-10-21 16:48
回复 6# sanmaodo
你写得百分号个数不对,请再观察2楼代码。
作者: sanmaodo 时间: 2022-10-21 17:57
本帖最后由 sanmaodo 于 2022-10-21 18:03 编辑
回复 9# holley
这是一个资源管理器里针对exe文件的右键菜单项,用cmd窗口运行exe程序,同时把exe的全路径复制到剪贴板备用,
下面的代码能正常工作:- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\SystemFileAssociations\.exe\shell\Item0]
- "MUIVerb"="用 cmd 打开"
- "Icon"="C:\\Windows\\System32\\cmd.exe ,0"
-
- [HKEY_CLASSES_ROOT\SystemFileAssociations\.exe\shell\Item0\command]
- @="C:\\Windows\\System32\\cmd.exe /k echo %1 | clip && \"%1\""
复制代码
但我真正想要复制的是exe的文件名,所以发帖提问。
但下面的代码没有达到目标,它依旧返回全路径。- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\SystemFileAssociations\.exe\shell\Item0]
- "MUIVerb"="用 cmd 打开"
- "Icon"="C:\\Windows\\System32\\cmd.exe ,0"
-
- [HKEY_CLASSES_ROOT\SystemFileAssociations\.exe\shell\Item0\command]
- @="C:\\Windows\\System32\\cmd.exe /k \"%1\" && set "full=%1" && set "pd=%W" && call echo %%full:%dp%=%%"
-
- ; %1 表示所选择文件的全路径
- ; %W 表示所选择文件的路径(不含文件名)
复制代码
感谢大家的帮助!我似乎把问题变的更复杂了
作者: WHY 时间: 2022-10-21 20:15
回复 11# sanmaodo - @="C:\\Windows\\System32\\cmd.exe /v /k set p=%1&echo !p:%W\\=!|clip&&\"%1\""
复制代码
试试
作者: sanmaodo 时间: 2022-10-21 21:01
回复 sanmaodo 试试
WHY 发表于 2022-10-21 20:15
目标达成,完美了,感谢!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |