[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 请问批处理如何在字符串替换表达式中,引用变量?[已解决]

本帖最后由 sanmaodo 于 2022-10-21 14:05 编辑

我知道下面的代码是可行的,将得到 ”111.txt“
  1. set full="d:\aaa\111.txt"
  2. echo %full:d:\aaa\=%
复制代码
我的问题是,如何用变量来替代第二行中的 ”d:\aaa\“
像下的代码,不会正确返回,请问要如何修改?
  1. set full="d:\aaa\111.txt"
  2. set path="d:\aaa"
  3. set path=%path%\
  4. echo %full:%path%=%
复制代码
感谢!

回复  sanmaodo 试试
WHY 发表于 2022-10-21 20:15

目标达成,完美了,感谢!!

TOP

回复 11# sanmaodo
  1. @="C:\\Windows\\System32\\cmd.exe /v /k set p=%1&echo !p:%W\\=!|clip&&\"%1\""
复制代码
试试
1

评分人数

TOP

本帖最后由 sanmaodo 于 2022-10-21 18:03 编辑

回复 9# holley
这是一个资源管理器里针对exe文件的右键菜单项,用cmd窗口运行exe程序,同时把exe的全路径复制到剪贴板备用,
下面的代码能正常工作:
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\SystemFileAssociations\.exe\shell\Item0]
  3. "MUIVerb"="用 cmd 打开"
  4. "Icon"="C:\\Windows\\System32\\cmd.exe ,0"
  5. [HKEY_CLASSES_ROOT\SystemFileAssociations\.exe\shell\Item0\command]
  6. @="C:\\Windows\\System32\\cmd.exe /k echo %1 | clip && \"%1\""
复制代码
但我真正想要复制的是exe的文件名,所以发帖提问。
但下面的代码没有达到目标,它依旧返回全路径。
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\SystemFileAssociations\.exe\shell\Item0]
  3. "MUIVerb"="用 cmd 打开"
  4. "Icon"="C:\\Windows\\System32\\cmd.exe ,0"
  5. [HKEY_CLASSES_ROOT\SystemFileAssociations\.exe\shell\Item0\command]
  6. @="C:\\Windows\\System32\\cmd.exe /k \"%1\" && set "full=%1" && set "pd=%W" && call echo %%full:%dp%=%%"
  7. ; %1  表示所选择文件的全路径
  8. ; %W  表示所选择文件的路径(不含文件名)
复制代码
感谢大家的帮助!我似乎把问题变的更复杂了

TOP

回复 6# sanmaodo


    你写得百分号个数不对,请再观察2楼代码。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

翻来覆去没搞懂你要啥?
要这个?
  1. @echo off&setlocal enabledelayedexpansion&for /f "delims=" %%a in ("D:\3m_script\tools\oscdimg.exe") do (echo.%%~nxa)
复制代码
1

评分人数

TOP

回复 6# sanmaodo


   
多条set指令建议分行写(set/a逗号分隔的除外),这样的结果比较稳定,写在一行里,会有许多不确定性

TOP

本帖最后由 holley 于 2022-10-21 15:02 编辑

回复 1# sanmaodo
  1. @echo off
  2. set full="d:\aaa\111.txt"
  3. echo %full:d:\aaa\=%
  4. call :print %full%
  5. :print
  6. set fn=%~nx1
  7. echo %fn%
  8. set fp=%~dp1
  9. echo %fp%
  10. pause
复制代码

TOP

回复 2# hfxiang

抱歉,又遇到一个小问题,
我需要把代码放在注册表里,所以要写成一行,但返回不正确,请问又办法解决吗?
  1. set full="D:\3m_script\tools\oscdimg.exe" && set "pd=D:\3m_script\tools\" && call echo %full:%pd%=%
复制代码
奇怪,在cmd窗口测试时,代码执行第一次,返回是错误的,再执行一次,返回又正确了。

TOP

感谢大家的帮助!代码现在工作正常。

TOP

回复 3# 77七


    path系统默认的环境变量,不要用它作为自定义变量。
2

评分人数

    • sanmaodo: 乐于助人技术 + 1
    • 77七: 谢谢大佬指点!学习了!技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

刚开始学习,乱写的
  1. @echo off & setlocal enabledelayedexpansion
  2. set "full=d:\aaa\111.txt"
  3. set "path=d:\aaa"
  4. set "path=%path%\"
  5. set "full=!full:%path%=!"
  6. echo %full%
  7. pause
复制代码
1

评分人数

TOP

  1. set full="d:\aaa\111.txt"
  2. set "dp=d:\aaa\"
  3. call echo %%full:%dp%=%%
复制代码
1

评分人数

TOP

返回列表