找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 33147|回复: 7

[文本处理] 【已解决】批处理变量路径替换,~转义?

[复制链接]
发表于 2015-8-13 10:57:17 | 显示全部楼层 |阅读模式
本帖最后由 ttszuo 于 2015-8-21 23:06 编辑

想做一个复制文件路径到剪贴板的批处理,其中遇到需要处理变量路径替换的不知该从哪入手

批处理是获取文件%1的路径到剪贴板,当文件路径存在系统变量时优先获取尽可能长的系统变量路径

直观的说就是
%1路径为C:\WINDOWS\explorer.exe时
获取路径%SystemRoot%\explorer.exe
不是%SystemDrive%WINDOWS\explorer.exe或者C:\WINDOWS\explorer.exe

另外一个问题是~在变量中如何转义替换
  1. @echo off
  2. ::if "%~1"=="" exit
  3. set |find ":"|find /v ";"
  4. pause
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-8-13 11:18:30 | 显示全部楼层
推荐你用 Path Copy Copy
http://pathcopycopy.codeplex.com/
 楼主| 发表于 2015-8-14 18:14:27 | 显示全部楼层
谢谢,有安装FileMenu Tools,现在只是要批处理
发表于 2015-8-14 18:22:26 | 显示全部楼层
查表法……
 楼主| 发表于 2015-8-14 20:43:00 | 显示全部楼层
回复 4# pcl_test

怎么替换变量中的变量,还有怎么替换变量中的~字符
这里哪里出了问题,怎么替换不掉
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set lujing=C:\WINDOWS\explorer.exe
  4. set lujing=!lujing:^%SystemRoot^%=!
  5. echo.!lujing!
  6. set lujing1=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp
  7. set lujing1=!lujing1:^^~=!
  8. echo.!lujing1!
  9. pause
复制代码
发表于 2015-8-14 21:18:13 | 显示全部楼层
~*= 这三个特殊字符是无解的,只能单个字符处理后拼接
http://www.bathome.net/viewthread.php?tid=6038

评分

参与人数 1技术 +1 收起 理由
ttszuo + 1 感谢分享

查看全部评分

发表于 2015-8-14 21:55:53 | 显示全部楼层
回复 5# ttszuo
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set lujing=C:\WINDOWS\explorer.exe
  4. set lujing=!lujing:%SystemRoot%\=!
  5. echo;%lujing%
  6. set lujing1=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp
  7. for /f "tokens=1-4 delims=~" %%a in ("%lujing1%") do echo;%%a%%b%%c%%d
  8. >"%tmp%\$.vbs" echo;lujing1="C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp":WSH.Echo replace(lujing1,"~","")
  9. for /f "delims=" %%a in ('cscript /nologo "%tmp%\$.vbs"') do echo;%%a
  10. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
ttszuo + 1 乐于助人

查看全部评分

发表于 2015-8-14 21:56:59 | 显示全部楼层
本帖最后由 WHY 于 2015-8-14 22:17 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1*delims==" %%i in ('set^|find ":"^|find /v ";"')do echo %%j/%%i>>~tmp.$

  4. set "strPath=C:\Program Files\Common Files\Adobe"
  5. for /f "tokens=1* delims=/" %%i in ('sort /r ~tmp.$') do (
  6.     set "strPath=!strPath:%%i=%%%%j%%!"
  7. )
  8. echo !strPath!
  9. pause
复制代码
原来楼主要拖放操作

评分

参与人数 1技术 +1 收起 理由
ttszuo + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 18:01 , Processed in 0.020723 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表