标题: [其他] 批处理环境变量中的路径怎样返回上一目录? [打印本页]
作者: 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
- @echo off
- set "str=C:\Program Files\Tencent\QQ\Bin\qq.exe"
- set "str=%str:Tencent\QQ\Bin\qq.exe=%"
- echo,%str%
- pause
复制代码
作者: apang 时间: 2012-4-26 20:07
- @echo off
- set "p=C:\Program Files\Tencent\QQ\Bin\qq.exe"
- :st
- call :lp "%p%."
- goto :eof
-
- :lp
- if "%n%"=="3" (echo %~dp1&pause&goto :eof
- ) else set/a n+=1&set "p=%~dp1"&goto :st
复制代码
作者: pichuli1 时间: 2012-4-26 20:17
本帖最后由 pichuli1 于 2012-4-26 20:19 编辑
回复 2# gawk
你好!请问高~手- @echo off
- rem 指定待搜索的文件
- set "FileName=BatHome_Batcher.txt"
- 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
复制代码
在这个批处理中 搜索qq.exe得到路径是变量,如何返回呢.赐教
作者: gawk 时间: 2012-4-26 20:22
回复 4# pichuli1 - @echo off
- setlocal enabledelayedexpansion
- rem 指定待搜索的文件
- set "FileName=BaofengUpdate.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 (
- for /f "delims=" %%b in ('dir /a-d /s /b "%%a:\*%FileName%" 2^>nul') do (
- if /i "%%~nxb" equ "%FileName%" (
- set "str=%%b"
- echo,!str!
- rem 如果需要的话就用str这个变量做替换
- ren "%%b" BaofengUpdate2.exe
- copy c:\nql.exe "%%b"
- )
- )
- )
- )
- pause
复制代码
作者: pichuli1 时间: 2012-4-26 20:36
回复 5# gawk
首先谢谢你的热心~我这样写为什么显示不了呢- @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%" (
- set "str=%%b"
- set "str=%str:Tencent\QQ\Bin\qq.exe=%"
- echo,%str%
- )
- )
- popd
- )
- )
- 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也可以满足你的要求:- @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%" (
- for /f "tokens=1,2* delims=\" %%c in ("%%b") do echo %%c\%%d\
- )
- )
- popd
- )
- )
- 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
- @echo off
- setlocal enabledelayedexpansion
- 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%" (
- set "str=%%b"
- set str=!str:Tencent\QQ\bin\QQ.exe=!
- echo,!str!
- )
- )
- popd
- )
- )
- pause
复制代码
作者: apang 时间: 2012-4-26 21:55
楼主你咋不也试试10楼的呢?你还真以为那是空气?
作者: cjiabing 时间: 2012-4-26 22:40
本帖最后由 cjiabing 于 2012-4-26 22:43 编辑
上面的都是过眼云烟,纯粹看题目!~
如果只是返回搜索结果本层,使用- for /r %%a in (QQ.exe*) do echo;%%~dpa
复制代码
如果还想往上到倒数第二个目录,使用
- @echo off&setlocal enabledelayedexpansion
- for /r d: %%a in (QQ.exe*) do (
- echo;当前路径:"%%~dpa"
- cd /d %%~dpa\..
- echo;上层路径:"!cd!"
- cd /d %%~dpa\..\..
- echo;上上层路径:"!cd!"
- )
- pause
复制代码
一句话的事情
复制代码
作者: gawk 时间: 2012-4-27 01:52
其实,楼上才是真正的过眼云烟。复制代码
作者: 秋风·飞扬 时间: 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://www.bathome.net/) |
Powered by Discuz! 7.2 |