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

[其他] 批处理环境变量中的路径怎样返回上一目录?

[复制链接]
发表于 2012-4-26 19:17:45 | 显示全部楼层 |阅读模式
比如 搜索qq.exe得到路径C:\Program Files\Tencent\QQ\Bin\qq.exe 如何返回到C:\Program Files\ 目录?
发表于 2012-4-26 19:59:21 | 显示全部楼层
  1. @echo off
  2. set "str=C:\Program Files\Tencent\QQ\Bin\qq.exe"
  3. set "str=%str:Tencent\QQ\Bin\qq.exe=%"
  4. echo,%str%
  5. pause
复制代码
发表于 2012-4-26 20:07:10 | 显示全部楼层
  1. @echo off
  2. set "p=C:\Program Files\Tencent\QQ\Bin\qq.exe"
  3. :st
  4. call :lp "%p%."
  5. goto :eof

  6. :lp
  7. if "%n%"=="3" (echo %~dp1&pause&goto :eof
  8. ) else set/a n+=1&set "p=%~dp1"&goto :st
复制代码
 楼主| 发表于 2012-4-26 20:17:27 | 显示全部楼层
本帖最后由 pichuli1 于 2012-4-26 20:19 编辑

回复 2# gawk
你好!请问高~手
  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=BatHome_Batcher.txt"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.   if exist %%a:\nul (
  7.     pushd %%a:\
  8.     for /r %%b in ("*%FileName%") do (
  9.       if /i "%%~nxb" equ "%FileName%" (
  10.         echo.%%b
  11.       )
  12.     )
  13.     popd
  14.   )
  15. )
  16. pause
复制代码
在这个批处理中 搜索qq.exe得到路径是变量,如何返回呢.赐教
发表于 2012-4-26 20:22:55 | 显示全部楼层
回复 4# pichuli1
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 指定待搜索的文件
  4. set "FileName=BaofengUpdate.exe"
  5. echo 正在搜索,请稍候...
  6. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  7.     if exist %%a:\nul (
  8.         for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
  9.             if /i "%%~nxb" equ "%FileName%" (
  10.                 set "str=%%b"
  11.                 echo,!str!
  12.                 rem 如果需要的话就用str这个变量做替换
  13.                 ren "%%b" BaofengUpdate2.exe
  14.                 copy c:\nql.exe "%%b"
  15.             )
  16.         )
  17.     )
  18. )
  19. pause
复制代码
 楼主| 发表于 2012-4-26 20:36:19 | 显示全部楼层
回复 5# gawk
首先谢谢你的热心~我这样写为什么显示不了呢
  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=qq.exe"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.   if exist %%a:\nul (
  7.     pushd %%a:\
  8.     for /r %%b in ("*%FileName%") do (
  9.       if /i "%%~nxb" equ "%FileName%" (
  10.        set "str=%%b"
  11. set "str=%str:Tencent\QQ\Bin\qq.exe=%"
  12. echo,%str%
  13.       )
  14.     )
  15.     popd
  16.   )
  17. )
  18. pause
复制代码
发表于 2012-4-26 20:40:12 | 显示全部楼层
回复 6# pichuli1


    因为你没有开启变量延迟扩展
 楼主| 发表于 2012-4-26 20:44:16 | 显示全部楼层
回复 7# gawk


    请问应该怎么写呢
发表于 2012-4-26 20:50:02 | 显示全部楼层
回复 8# pichuli1


    看5楼
发表于 2012-4-26 20:54:25 | 显示全部楼层
回复 8# pichuli1

其实用for也可以满足你的要求:
  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=qq.exe"
  4. echo 正在搜索,请稍候...
  5. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  6.   if exist %%a:\nul (
  7.     pushd %%a:\
  8.     for /r %%b in ("*%FileName%") do (
  9.       if /i "%%~nxb" equ "%FileName%" (
  10.       for /f "tokens=1,2* delims=" %%c in ("%%b") do echo %%c\%%d\
  11.       )
  12.     )
  13.     popd
  14.   )
  15. )
  16. pause
复制代码
发表于 2012-4-26 20:55:23 | 显示全部楼层
你好,请问 @echo off
rem 指定待搜索的文件
set "FileName=qq.exe"
echo 正在搜索,请稍候...
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  if exist %%a:\nul (
    pushd %%a:\
    for /r %%b in ("*%FileName%") do (
      if /i "%%~nxb" equ "%FileName%" (
        echo.%%b
      )
    )
    popd
  )
)
pause
这个批处理 得到路径是C:\Program Files\Tencent\QQ\bin\QQ.exe
如何返回到 C:\Program Files\

直接回复我的帖子,论坛会自动提醒我。请不要单独给我发送私人消息。谢谢。
发表于 2012-4-26 20:58:42 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. rem 指定待搜索的文件
  4. set "FileName=qq.exe"
  5. echo 正在搜索,请稍候...
  6. for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
  7.     if exist %%a:\nul (
  8.         pushd %%a:\
  9.         for /r %%b in ("*%FileName%") do (
  10.             if /i "%%~nxb" equ "%FileName%" (
  11.                 set "str=%%b"
  12.                 set str=!str:Tencent\QQ\bin\QQ.exe=!
  13.                 echo,!str!
  14.             )
  15.         )
  16.         popd
  17.     )
  18. )
  19. pause
复制代码

评分

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

查看全部评分

发表于 2012-4-26 21:55:58 | 显示全部楼层
楼主你咋不也试试10楼的呢?你还真以为那是空气?
发表于 2012-4-26 22:40:45 | 显示全部楼层
本帖最后由 cjiabing 于 2012-4-26 22:43 编辑

上面的都是过眼云烟,纯粹看题目!~
如果只是返回搜索结果本层,使用
  1. for /r %%a in (QQ.exe*) do echo;%%~dpa
复制代码

如果还想往上到倒数第二个目录,使用
  1. @echo off&setlocal enabledelayedexpansion
  2. for /r d: %%a in (QQ.exe*) do (
  3.     echo;当前路径:"%%~dpa"
  4.     cd /d %%~dpa\..
  5.     echo;上层路径:"!cd!"
  6.     cd /d %%~dpa\..\..
  7.     echo;上上层路径:"!cd!"
  8. )
  9. pause
复制代码

一句话的事情
  1. cd ..\..
复制代码
发表于 2012-4-27 01:52:13 | 显示全部楼层
其实,楼上才是真正的过眼云烟。
  1. echo %ProgramFiles%
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 02:13 , Processed in 0.021406 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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