baolizhu 发表于 2023-8-24 18:36:44

路径截取并设置为变量该怎么写批处理?

用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:24

for/?

610644034 发表于 2023-8-24 19:28:49

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:查询注册表一个数值
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:27

试过直接在注册表搜C:\Program Files\WinRAR么,找找还有没别的键值是只有路径的

ppll2030 发表于 2023-8-25 08:25:23

没看明白,你的命令结果,应该包含了path=C:\Program Files\WinRAR\的啊。至少我安装rar,结果是如此的。难道你是要做绿化脚本

holley2008 发表于 2023-8-25 10:58:25

是这个意思吗?
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe" /v "Path"

szwp 发表于 2023-8-25 11:46:00

不会截取还是不会设置?

9zhmke 发表于 2023-8-25 19:29:30

估计他说的是怎么把字符串从信息中取出来:
@echo off
set text="(默认)    REG_SZ    C:\Program Files\WinRAR\WinRAR.exe"
for /f "tokens=3* delims= " %%i in ('echo %text%') do set free="%%i %%j
echo %free%
pause

baolizhu 发表于 2023-9-5 20:09:03

9zhmke 发表于 2023-8-25 19:29
估计他说的是怎么把字符串从信息中取出来:

怎样提取路径中的C:\Program Files\WinRAR\

baolizhu 发表于 2023-9-5 20:09:19

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:31

本帖最后由 baolizhu 于 2023-9-5 20:13 编辑

szwp 发表于 2023-8-25 11:46
不会截取还是不会设置?
不会截取,我想从C:\Program Files\WinRAR\WinRAR.exe中截取C:\Program Files\WinRAR\来作为path的值最终结果为
默认 reg_szC:\Program Files\WinRAR\WinRAR.exepath reg_sz C:\Program Files\WinRAR\


szwp 发表于 2023-9-6 08:30:27

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

将设置的命令写出来。

chiannet 发表于 2023-9-6 17:02:56

本帖最后由 chiannet 于 2023-9-6 17:24 编辑

@Echo Off
Setlocal Enabledelayedexpansion
for /f "Tokens=1,2Delims=:" %%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:48

baolizhu 发表于 2023-9-5 20:09
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinRAR.exe   (默认)    REG_ ...

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

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


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

天使说请安静 发表于 2023-9-8 10:20:28

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:42

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
    Path    REG_SZ    C:\Program Files\WinRAR
只需一句话:
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:20

路过,学习了

baolizhu 发表于 2023-9-8 23:19:07

我要实现的功能已经可以了,就是早期映像支持的原理,把我们常用的软件添加到里面去,可以减少桌面上应用的数量。

@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,2Delims=:" %%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:59

学习一下

ppll2030 发表于 2023-9-12 11:01:11

baolizhu 发表于 2023-9-8 23:19
我要实现的功能已经可以了,就是早期映像支持的原理,把我们常用的软件添加到里面去,可以减少桌面上应用的 ...
晕了。绕这么大一个圈。:dizzy:
既然你是要输入的,那输入的就是完整路径。
直接截取不就好了。干嘛还跑进注册表分段截取。
set /p install_path=请输入软件安装路径:
for %%a in ("%install_path%") do set P=%%~dpa
既可以直接获得目录路径了。
页: [1]
查看完整版本: 路径截取并设置为变量该怎么写批处理?