无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 3536|回复: 19
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 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\,不知道怎么实现,谢谢大家的鼎力相助!!!!!!!!!!!
20#
发表于 2023-9-12 11:01:11 | 只看该作者
baolizhu 发表于 2023-9-8 23:19
我要实现的功能已经可以了,就是早期映像支持的原理,把我们常用的软件添加到里面去,可以减少桌面上应用的 ...

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

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

使用道具 举报

19#
发表于 2023-9-9 14:01:59 来自手机 | 只看该作者
学习一下
回复

使用道具 举报

18#
 楼主| 发表于 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,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
回复

使用道具 举报

17#
发表于 2023-9-8 13:35:20 | 只看该作者
路过,学习了
回复

使用道具 举报

16#
发表于 2023-9-8 13:20:42 | 只看该作者
  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
回复

使用道具 举报

15#
发表于 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%"
简单粗暴
回复

使用道具 举报

14#
发表于 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???

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


回归技术层面,只讨论技术,不讨论政治正确
如果你确定你的查询结果只有默认名,而没有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
复制代码


回复

使用道具 举报

13#
发表于 2023-9-6 17:02:56 | 只看该作者
本帖最后由 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
回复

使用道具 举报

12#
发表于 2023-9-6 08:30:27 | 只看该作者
baolizhu 发表于 2023-9-5 20:10
不会截取,我想从C:\Program Files\WinRAR\WinRAR.exe中截取C:\Program Files\WinRAR\来作为path的值最终 ...

将设置的命令写出来。
回复

使用道具 举报

11#
 楼主| 发表于 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_sz  C:\Program Files\WinRAR\WinRAR.exepath reg_sz C:\Program Files\WinRAR\


回复

使用道具 举报

10#
 楼主| 发表于 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
回复

使用道具 举报

9#
 楼主| 发表于 2023-9-5 20:09:03 | 只看该作者
9zhmke 发表于 2023-8-25 19:29
估计他说的是怎么把字符串从信息中取出来:

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

使用道具 举报

8#
发表于 2023-8-25 19:29:30 | 只看该作者
估计他说的是怎么把字符串从信息中取出来:
  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
复制代码
回复

使用道具 举报

7#
发表于 2023-8-25 11:46:00 来自手机 | 只看该作者
不会截取还是不会设置?
回复

使用道具 举报

6#
发表于 2023-8-25 10:58:25 | 只看该作者
是这个意思吗?

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


回复

使用道具 举报

5#
发表于 2023-8-25 08:25:23 | 只看该作者
没看明白,你的命令结果,应该包含了path=C:\Program Files\WinRAR\的啊。至少我安装rar,结果是如此的。难道你是要做绿化脚本
回复

使用道具 举报

4#
发表于 2023-8-25 02:08:27 | 只看该作者
试过直接在注册表搜C:\Program Files\WinRAR么,找找还有没别的键值是只有路径的
回复

使用道具 举报

3#
发表于 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
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
回复

使用道具 举报

2#
发表于 2023-8-24 18:45:24 来自手机 | 只看该作者
for  /?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-11 19:07

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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