无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 有阴也有阳

[求助] 如何把以下一句批处理命令的路径从绝对路径改成相对路径?

[复制链接]
发表于 2017-12-14 16:37:24 | 显示全部楼层 |阅读模式
        如何把以下一句批处理命令的路径从绝对路径改成相对路径:

cscript.exe "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus

        把绝对路径C盘改为从A——Z盘搜索“\Program Files\Microsoft Office\Office16\OSPP.VBS”......

                                                                                                                 谢谢!!!
发表于 2017-12-14 18:18:10 来自手机 | 显示全部楼层
其实有另一种思路,从注册表读取路径……
回复

使用道具 举报

发表于 2017-12-14 20:56:18 | 显示全部楼层
本帖最后由 永远的大象 于 2017-12-14 21:02 编辑

额,如果你的C:\Program Files是系统默认的路径的话,可以用%ProgramFiles%代替,注册表里面定义好了的

如果一定要搜索的话,还是我最常用的命令:for

  1. for %%i 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 "%%i:\Program Files\Microsoft Office\Office16\OSPP.VBS” Cscript "%%i:\Program Files\Microsoft Office\Office16\OSPP.VBS” /dstatus
复制代码



附送从KMS_VL_ALL提取的判断是否安装了OFFICE 2016 的方法:
  1. :: Check if Office 2016 products are ACTUALLY installed
  2. set /a _Office16=0
  3. for /f "tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do (
  4.     set "_msi16=%%b"
  5. )
  6. for /f "tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do (
  7.     set "_msi16wow=%%b"
  8. )
  9. for /f "tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do (
  10.     set "_ctr16=%%b\Office16"
  11. )
  12. if exist "%_msi16%\OSPP.VBS" (
  13.     set /a _Office16=1
  14. ) else if exist "%_msi16wow%\OSPP.VBS" (
  15.     set /a _Office16=1
  16. ) else if exist "%_ctr16%\OSPP.VBS" (
  17.     set /a _Office16=1
  18. ) else if exist "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" (
  19.     set /a _Office16=1
  20. ) else if exist "C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" (
  21.     set /a _Office16=1
  22. )
复制代码
回复

使用道具 举报

发表于 2017-12-15 10:14:05 | 显示全部楼层
a到z盘符搜索没意义,假如我装了多个操作系统,即使搜到又如何?

还不如用
cscript.exe "%ProgramFiles%\Microsoft Office\Office16\OSPP.VBS" /dstatus
回复

使用道具 举报

发表于 2017-12-15 11:15:16 | 显示全部楼层
请试验:
  1. cd /d "%~dp0"
  2. cscript.exe OSPP.VBS /dstatus
复制代码

点评

验证结果: [attachimg]363655[/attachimg]  详情 回复 发表于 2017-12-15 14:57
回复

使用道具 举报

 楼主| 发表于 2017-12-15 14:57:07 | 显示全部楼层

验证结果:

验证结果.png

点评

全放在 system32 目录下再试试  详情 回复 发表于 2017-12-16 14:19
他这个需要和OSPP.VBS在同一目录  详情 回复 发表于 2017-12-15 15:07
回复

使用道具 举报

发表于 2017-12-15 15:07:36 | 显示全部楼层

他这个需要和OSPP.VBS在同一目录
回复

使用道具 举报

发表于 2017-12-15 15:54:03 来自手机 | 显示全部楼层
远景有人写过激活的批处理……呃,访问不了,忘了
回复

使用道具 举报

发表于 2017-12-16 13:54:28 | 显示全部楼层
本帖最后由 kingshui 于 2017-12-17 13:38 编辑
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. for /f tokens^=2^ delims^=^" %%i in ('ftype^|find "Excel.CSV"') do (
  4.         set "a=%%i"
  5.         cscript.exe "!a:~0,-9!OSPP.VBS" /dstatus
  6. )
  7. pause
复制代码


供参考,针对安装了office的系统有效。

点评

for的这句转义 我也迷迷糊糊  详情 回复 发表于 2018-8-17 08:07
谢谢!!!测试可用: [attachimg]364118[/attachimg]  详情 回复 发表于 2017-12-17 13:04

评分

参与人数 1无忧币 +5 收起 理由
有阴也有阳 + 5 简单!高效!很给力!!!

查看全部评分

回复

使用道具 举报

发表于 2017-12-16 14:19:51 | 显示全部楼层

全放在 system32 目录下再试试
回复

使用道具 举报

发表于 2017-12-16 14:24:57 | 显示全部楼层
系统默认是这样打开的
C:\WINDOWS\System32\WScript.exe "%1" %*
C:\WINDOWS\System32\CScript.exe "%1" %*
回复

使用道具 举报

 楼主| 发表于 2017-12-17 13:04:44 | 显示全部楼层
kingshui 发表于 2017-12-16 13:54
供参考,针对安装了office的版本有效。

        谢谢!!!测试可用:

测试可用.png
回复

使用道具 举报

发表于 2017-12-17 15:06:06 | 显示全部楼层
  1. @echo off
  2. rem 指定待搜索的文件
  3. set "FileName=OSPP.VBS"
  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:\ (
  7.     pushd %%a:\
  8.     for /r %%b in (*%FileName%) do (
  9.       if /i "%%~nxb" equ "%FileName%" (
  10.         set vbs_path=%%b
  11.         goto act_task
  12.       )
  13.     )
  14.     popd
  15.   )
  16. )
  17. goto end

  18. :act_task
  19. echo %vbs_path%
  20. cscript "%vbs_path%" /remhst
  21. cscript "%vbs_path%" /sethst:xxx.xxxx.xxx
  22. cscript "%vbs_path%" /setprt:xxxx
  23. cscript "%vbs_path%" /act
  24. schtasks /create /tn "激活OFFICE" /tr "cscript.exe '%vbs_path%' /act" /sc monthly /mo 2 /ru "system" /st 09:30
  25. goto:eof

  26. :end
  27. echo 没有找到文件。
复制代码


贴个我自己在用的。服务器在本机的话直接/act就可以了。
顺便还添加了激活的计划任务。
不过查找文件的效率没有ftype这个高。
改天在修改一下。
回复

使用道具 举报

发表于 2018-1-12 22:24:24 | 显示全部楼层
kingshui 发表于 2017-12-16 13:54
供参考,针对安装了office的系统有效。

遍历吗

点评

不遍历。只要软件关联没出问题,那就没问题。  详情 回复 发表于 2018-1-13 18:09
回复

使用道具 举报

发表于 2018-1-13 18:09:05 | 显示全部楼层

不遍历。只要软件关联没出问题,那就没问题。
回复

使用道具 举报

发表于 2018-6-6 18:45:43 | 显示全部楼层
for /f tokens^=2^ delims^=^" %%i in ('ftype^|find "Excel.CSV"') do (
我能请教2后面的^在这是转义的哪个字符吗?

点评

转义双引号  详情 回复 发表于 2018-8-24 21:03
回复

使用道具 举报

发表于 2018-6-8 17:37:27 来自手机 | 显示全部楼层
发出环境来看看,那个csv里肯定看得出来。

点评

根据文件关联来获取软件路径是挺高效的方法。,我也是当时在处理JAVA版本的时候发现的。  详情 回复 发表于 2018-8-24 21:07
回复

使用道具 举报

发表于 2018-8-17 08:07:40 | 显示全部楼层
kingshui 发表于 2017-12-16 13:54
供参考,针对安装了office的系统有效。

for的这句转义 我也迷迷糊糊

点评

转义双引号  详情 回复 发表于 2018-8-24 21:03
回复

使用道具 举报

发表于 2018-8-24 21:03:27 | 显示全部楼层
holley2008 发表于 2018-8-17 08:07
for的这句转义 我也迷迷糊糊

转义双引号
回复

使用道具 举报

发表于 2018-8-24 21:03:43 | 显示全部楼层
双响炮 发表于 2018-6-6 18:45
for /f tokens^=2^ delims^=^" %%i in ('ftype^|find "Excel.CSV"') do (
我能请教2后面的^在这是转义的哪 ...

转义双引号
回复

使用道具 举报

发表于 2018-8-24 21:07:09 | 显示全部楼层
窄口牛 发表于 2018-6-8 17:37
发出环境来看看,那个csv里肯定看得出来。

根据文件关联来获取软件路径是挺高效的方法。,我也是当时在处理JAVA版本的时候发现的。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-3-29 18:27

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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