有阴也有阳 发表于 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”......

                                                                                                               谢谢!!!

nttwqz 发表于 2017-12-14 18:18:10

其实有另一种思路,从注册表读取路径……

永远的大象 发表于 2017-12-14 20:56:18

本帖最后由 永远的大象 于 2017-12-14 21:02 编辑

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

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

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 的方法:
:: Check if Office 2016 products are ACTUALLY installed
set /a _Office16=0
for /f "tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do (
    set "_msi16=%%b"
)
for /f "tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Common\InstallRoot /v Path" 2^>nul') do (
    set "_msi16wow=%%b"
)
for /f "tokens=2*" %%a in ('"reg query HKLM\SOFTWARE\Microsoft\Office\ClickToRun /v InstallPath" 2^>nul') do (
    set "_ctr16=%%b\Office16"
)
if exist "%_msi16%\OSPP.VBS" (
    set /a _Office16=1
) else if exist "%_msi16wow%\OSPP.VBS" (
    set /a _Office16=1
) else if exist "%_ctr16%\OSPP.VBS" (
    set /a _Office16=1
) else if exist "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" (
    set /a _Office16=1
) else if exist "C:\Program Files (x86)\Microsoft Office\Office16\OSPP.VBS" (
    set /a _Office16=1
)

yfwang0798 发表于 2017-12-15 10:14:05

a到z盘符搜索没意义,假如我装了多个操作系统,即使搜到又如何?

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

chishingchan 发表于 2017-12-15 11:15:16

请试验:
cd /d "%~dp0"
cscript.exe OSPP.VBS /dstatus

有阴也有阳 发表于 2017-12-15 14:57:07

chishingchan 发表于 2017-12-15 11:15
请试验:

验证结果:

永远的大象 发表于 2017-12-15 15:07:36

有阴也有阳 发表于 2017-12-15 14:57
验证结果:

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

nttwqz 发表于 2017-12-15 15:54:03

远景有人写过激活的批处理……呃,访问不了,忘了

kingshui 发表于 2017-12-16 13:54:28

本帖最后由 kingshui 于 2017-12-17 13:38 编辑

@echo off
SetLocal EnableDelayedExpansion
for /f tokens^=2^ delims^=^" %%i in ('ftype^|find "Excel.CSV"') do (
        set "a=%%i"
        cscript.exe "!a:~0,-9!OSPP.VBS" /dstatus
)
pause

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

chishingchan 发表于 2017-12-16 14:19:51

有阴也有阳 发表于 2017-12-15 14:57
验证结果:

全放在 system32 目录下再试试

chishingchan 发表于 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的版本有效。

      谢谢!!!测试可用:

icevan 发表于 2017-12-17 15:06:06

@echo off
rem 指定待搜索的文件
set "FileName=OSPP.VBS"
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:\ (
    pushd %%a:\
    for /r %%b in (*%FileName%) do (
      if /i "%%~nxb" equ "%FileName%" (
      set vbs_path=%%b
        goto act_task
      )
    )
    popd
)
)
goto end

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

:end
echo 没有找到文件。

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

sairen139 发表于 2018-1-12 22:24:24

kingshui 发表于 2017-12-16 13:54
供参考,针对安装了office的系统有效。

遍历吗

kingshui 发表于 2018-1-13 18:09:05

sairen139 发表于 2018-1-12 22:24
遍历吗

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

双响炮 发表于 2018-6-6 18:45:43

for /f tokens^=2^ delims^=^" %%i in ('ftype^|find "Excel.CSV"') do (
我能请教2后面的^在这是转义的哪个字符吗?

窄口牛 发表于 2018-6-8 17:37:27

发出环境来看看,那个csv里肯定看得出来。

holley2008 发表于 2018-8-17 08:07:40

kingshui 发表于 2017-12-16 13:54
供参考,针对安装了office的系统有效。

for的这句转义 我也迷迷糊糊{:1_185:}

kingshui 发表于 2018-8-24 21:03:27

holley2008 发表于 2018-8-17 08:07
for的这句转义 我也迷迷糊糊

转义双引号

kingshui 发表于 2018-8-24 21:03:43

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

转义双引号

kingshui 发表于 2018-8-24 21:07:09

窄口牛 发表于 2018-6-8 17:37
发出环境来看看,那个csv里肯定看得出来。

根据文件关联来获取软件路径是挺高效的方法。{:1_186:},我也是当时在处理JAVA版本的时候发现的。
页: [1]
查看完整版本: 如何把以下一句批处理命令的路径从绝对路径改成相对路径?