Board logo

标题: [其他] 批处理环境变量中的路径怎样返回上一目录? [打印本页]

作者: pichuli1    时间: 2012-4-26 19:17     标题: 批处理环境变量中的路径怎样返回上一目录?

比如 搜索qq.exe得到路径C:\Program Files\Tencent\QQ\Bin\qq.exe 如何返回到C:\Program Files\ 目录?
作者: gawk    时间: 2012-4-26 19:59

  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
复制代码

作者: apang    时间: 2012-4-26 20:07

  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
复制代码

作者: pichuli1    时间: 2012-4-26 20:17

本帖最后由 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得到路径是变量,如何返回呢.赐教
作者: gawk    时间: 2012-4-26 20:22

回复 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
复制代码

作者: pichuli1    时间: 2012-4-26 20:36

回复 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
复制代码

作者: gawk    时间: 2012-4-26 20:40

回复 6# pichuli1


    因为你没有开启变量延迟扩展
作者: pichuli1    时间: 2012-4-26 20:44

回复 7# gawk


    请问应该怎么写呢
作者: gawk    时间: 2012-4-26 20:50

回复 8# pichuli1


    看5楼
作者: apang    时间: 2012-4-26 20:54

回复 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
复制代码

作者: gawk    时间: 2012-4-26 20:55

你好,请问 @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\

直接回复我的帖子,论坛会自动提醒我。请不要单独给我发送私人消息。谢谢。
作者: gawk    时间: 2012-4-26 20:58

  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
复制代码

作者: apang    时间: 2012-4-26 21:55

楼主你咋不也试试10楼的呢?你还真以为那是空气?
作者: cjiabing    时间: 2012-4-26 22:40

本帖最后由 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 ..\..
复制代码

作者: gawk    时间: 2012-4-27 01:52

其实,楼上才是真正的过眼云烟。
  1. echo %ProgramFiles%
复制代码

作者: 秋风·飞扬    时间: 2012-5-3 14:49

.............gawk无处不在~!、~~           %%~dpa这个是什么意思
作者: 秋风·飞扬    时间: 2012-5-3 14:49

"%%~dpa"这个
作者: Taurus    时间: 2012-5-7 02:41

本帖最后由 Taurus 于 2012-5-7 08:19 编辑

樓主倒不如直接說出全個batch想達到甚麼作用吧

你這樣找path感覺真的很不實制,如果指定找qq.exe的話倒不如在regedit裹找好了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2