如何把以下一句批处理命令的路径从绝对路径改成相对路径?
如何把以下一句批处理命令的路径从绝对路径改成相对路径:cscript.exe "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus
把绝对路径C盘改为从A——Z盘搜索“\Program Files\Microsoft Office\Office16\OSPP.VBS”......
谢谢!!! 其实有另一种思路,从注册表读取路径…… 本帖最后由 永远的大象 于 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
) a到z盘符搜索没意义,假如我装了多个操作系统,即使搜到又如何?
还不如用
cscript.exe "%ProgramFiles%\Microsoft Office\Office16\OSPP.VBS" /dstatus
请试验:
cd /d "%~dp0"
cscript.exe OSPP.VBS /dstatus chishingchan 发表于 2017-12-15 11:15
请试验:
验证结果:
有阴也有阳 发表于 2017-12-15 14:57
验证结果:
他这个需要和OSPP.VBS在同一目录 远景有人写过激活的批处理……呃,访问不了,忘了 本帖最后由 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的系统有效。 有阴也有阳 发表于 2017-12-15 14:57
验证结果:
全放在 system32 目录下再试试 系统默认是这样打开的
C:\WINDOWS\System32\WScript.exe "%1" %*
C:\WINDOWS\System32\CScript.exe "%1" %* kingshui 发表于 2017-12-16 13:54
供参考,针对安装了office的版本有效。
谢谢!!!测试可用:
@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这个高。
改天在修改一下。 kingshui 发表于 2017-12-16 13:54
供参考,针对安装了office的系统有效。
遍历吗 sairen139 发表于 2018-1-12 22:24
遍历吗
不遍历。只要软件关联没出问题,那就没问题。 for /f tokens^=2^ delims^=^" %%i in ('ftype^|find "Excel.CSV"') do (
我能请教2后面的^在这是转义的哪个字符吗? 发出环境来看看,那个csv里肯定看得出来。 kingshui 发表于 2017-12-16 13:54
供参考,针对安装了office的系统有效。
for的这句转义 我也迷迷糊糊{:1_185:} holley2008 发表于 2018-8-17 08:07
for的这句转义 我也迷迷糊糊
转义双引号 双响炮 发表于 2018-6-6 18:45
for /f tokens^=2^ delims^=^" %%i in ('ftype^|find "Excel.CSV"') do (
我能请教2后面的^在这是转义的哪 ...
转义双引号 窄口牛 发表于 2018-6-8 17:37
发出环境来看看,那个csv里肯定看得出来。
根据文件关联来获取软件路径是挺高效的方法。{:1_186:},我也是当时在处理JAVA版本的时候发现的。
页:
[1]