无忧启动论坛

标题: 路径截取并设置为变量该怎么写批处理? [打印本页]

作者: baolizhu    时间: 2023-8-24 18:36
标题: 路径截取并设置为变量该怎么写批处理?
用reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"

查询结果为
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe
    (默认)    REG_SZ    C:\Program Files\WinRAR\WinRAR.exe


我想截取其中的C:\Program Files\WinRAR\的这个安装路径设置为path=C:\Program Files\WinRAR\,不知道怎么实现,谢谢大家的鼎力相助!!!!!!!!!!!

作者: szwp    时间: 2023-8-24 18:45
for  /?
作者: 610644034    时间: 2023-8-24 19:28
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:查询注册表一个数值
rem :查询注册表一个数值 "inout_ptr"       "in"       "in"   
rem :参数列表            输出的数值变量名 注册表路径 [注册表数值名,如果空则查询默认值]

( Reg Query "%~2" )>nul 2>nul || (
    goto :eof
)

if "" NEQ "%~1" set "%~1="
if "" NEQ "%~3" (
    for /f "delims=*" %%a in ( 'Reg Query "%~2" /v "%~3" ' ) do if "" NEQ "%%a" if "" NEQ "%~1" (
        set "查询注册表一个数值_临时变量=%%a"
        set "查询注册表一个数值_临时变量=!查询注册表一个数值_临时变量:    %~3    =!"
        for /f "tokens=1,* delims= " %%b in ( "!查询注册表一个数值_临时变量!" ) do set "查询注册表一个数值_输出数值=%%c"
        set "%~1=!查询注册表一个数值_输出数值!"
    )
    goto :eof
)>nul 2>nul

for /f "delims=*" %%a in ( 'Reg Query "%~2" /ve ' ) do if "" NEQ "%%a" if "" NEQ "%~1" (
        set "查询注册表一个数值_临时变量=%%a"
        set "查询注册表一个数值_临时变量=!查询注册表一个数值_临时变量:    %~3    =!"
        for /f "tokens=1,* delims= " %%b in ( "!查询注册表一个数值_临时变量!" ) do set "查询注册表一个数值_输出数值=%%c"
        set "%~1=!查询注册表一个数值_输出数值!"
)>nul 2>nul
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
作者: 2275385864    时间: 2023-8-25 02:08
试过直接在注册表搜C:\Program Files\WinRAR么,找找还有没别的键值是只有路径的
作者: ppll2030    时间: 2023-8-25 08:25
没看明白,你的命令结果,应该包含了path=C:\Program Files\WinRAR\的啊。至少我安装rar,结果是如此的。难道你是要做绿化脚本
作者: holley2008    时间: 2023-8-25 10:58
是这个意思吗?

  1. reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /v "Path"
复制代码



作者: szwp    时间: 2023-8-25 11:46
不会截取还是不会设置?
作者: 9zhmke    时间: 2023-8-25 19:29
估计他说的是怎么把字符串从信息中取出来:
  1. @echo off
  2. set text="(默认)    REG_SZ    C:\Program Files\WinRAR\WinRAR.exe"
  3. for /f "tokens=3* delims= " %%i in ('echo %text%') do set free="%%i %%j
  4. echo %free%
  5. pause
复制代码

作者: baolizhu    时间: 2023-9-5 20:09
9zhmke 发表于 2023-8-25 19:29
估计他说的是怎么把字符串从信息中取出来:

怎样提取路径中的C:\Program Files\WinRAR\
作者: baolizhu    时间: 2023-9-5 20:09
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe     (默认)    REG_SZ    C:\Program Files\WinRAR\WinRAR.exe   
   path    REG_SZ    C:\Program Files\WinRAR

作者: baolizhu    时间: 2023-9-5 20:10
本帖最后由 baolizhu 于 2023-9-5 20:13 编辑
szwp 发表于 2023-8-25 11:46
不会截取还是不会设置?

不会截取,我想从C:\Program Files\WinRAR\WinRAR.exe中截取C:\Program Files\WinRAR\来作为path的值最终结果为
默认 reg_sz  C:\Program Files\WinRAR\WinRAR.exepath reg_sz C:\Program Files\WinRAR\



作者: szwp    时间: 2023-9-6 08:30
baolizhu 发表于 2023-9-5 20:10
不会截取,我想从C:\Program Files\WinRAR\WinRAR.exe中截取C:\Program Files\WinRAR\来作为path的值最终 ...

将设置的命令写出来。
作者: chiannet    时间: 2023-9-6 17:02
本帖最后由 chiannet 于 2023-9-6 17:24 编辑

@Echo Off
Setlocal Enabledelayedexpansion
for /f "Tokens=1,2  Delims=:" %%i in ('REG Query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"^|find /i "默认"') do (
SET "P=%%i"
Set "P=!P:~-1!:%%~Pj"
echo 安装路径是:“!P!”
)

pause
exit
作者: ppll2030    时间: 2023-9-8 01:05
baolizhu 发表于 2023-9-5 20:09
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe     (默认)    REG_ ...

这个就是查询结果啊。rar安装后,再APP PATHS 这里就是一个默认名和一个path路径名,为什么你还要从上面截取路径来添加到path???

我的电脑查询结果也是如此,如图


回归技术层面,只讨论技术,不讨论政治正确
如果你确定你的查询结果只有默认名,而没有path键值。那下面的脚本就有用,
否则就是多戳鱼了。
  1. @echo off
  2. for /f "tokens=2,*" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"') do set a=%%j
  3. for %%a in ("%a%") do set dp=%%~dpa
  4. echo.&echo path=%dp%
  5. reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /f /v "Path" /t REG_SZ /d "C:\Program Files\WinRAR"
  6. pause
复制代码



作者: 天使说请安静    时间: 2023-9-8 10:20
for /f "delims=#" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"^|findstr 默认') do set a=%%i
set a=%a:    (默认)    REG_SZ    =%
echo "%a%"
简单粗暴
作者: pda8888    时间: 2023-9-8 13:20
  1. reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"
复制代码

的执行结果是:

  1. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe
  2.     (默认)    REG_SZ    C:\Program Files\WinRAR\WinRAR.exe
  3.     Path    REG_SZ    C:\Program Files\WinRAR
复制代码

只需一句话:
  1. for /f "tokens=2* delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe"^|find /i "Path"') do (set "winrar_path=%%a")
复制代码


echo %winrar_path%
C:\Program Files\WinRAR
作者: martin313    时间: 2023-9-8 13:35
路过,学习了
作者: baolizhu    时间: 2023-9-8 23:19
我要实现的功能已经可以了,就是早期映像支持的原理,把我们常用的软件添加到里面去,可以减少桌面上应用的数量。

@Echo Off
Setlocal Enabledelayedexpansion
:run
title 可以在运行框中直接运行xxx.exe文件的方式,早期的映像劫持也是这个原理
color 0a
echo.
echo.
echo.
echo 请输入软件名称,请不要加.exe扩展名:[比如:输入weinxin就可以了]
echo.
echo.
set /p excute=请输入软件名称,请不要加.exe扩展名:[比如:weinxin]:
echo.
echo.
echo.
echo 请输入软件安装路径:[比如:C:\Program Files\Tencent\WeChat\WeChat.exe]路径请不要双引号引起来
echo.
echo.
set /p install_path=请输入软件安装路径:[比如:C:\Program Files\Tencent\WeChat\WeChat.exe]:
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\%excute%.exe" /ve /t reg_sz /d "%install_path%" /F
for /f "Tokens=1,2  Delims=:" %%i in ('REG Query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\%excute%.exe"^|find /i "默认"') do (
SET "P=%%i"
Set "P=!P:~-1!:%%~Pj"
@rem echo 安装路径是:"!P!"
)
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\%excute%.exe"  /F /v "Path" /t reg_sz /d "\"!P!"
echo.
echo.
echo.
echo.
echo.
echo  你已经成功添加%excute%.exe,你现在可以在运行框中运行%excute%.exe了,减少桌面快捷方式的数量
echo.
echo.
echo.
echo.
ping  /n 5 127.0.0.1>nul
cls
goto run
exit
作者: dfdfdfdf99    时间: 2023-9-9 14:01
学习一下
作者: ppll2030    时间: 2023-9-12 11:01
baolizhu 发表于 2023-9-8 23:19
我要实现的功能已经可以了,就是早期映像支持的原理,把我们常用的软件添加到里面去,可以减少桌面上应用的 ...

晕了。绕这么大一个圈。
既然你是要输入的,那输入的就是完整路径。
直接截取不就好了。干嘛还跑进注册表分段截取。
  1. set /p install_path=请输入软件安装路径:
  2. for %%a in ("%install_path%") do set P=%%~dpa
复制代码

既可以直接获得目录路径了。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net./) Powered by Discuz! X3.3