获取Windows版本和版本,将其传递给变量以在

时间:2017-08-09 12:53:41

标签: batch-file cmd

我说这是我的第一个问题,但在这里搜索了大量的答案后,我仍然无法得到我想要的东西。所以问题是:需要获取Windows版本和版本并将其传递给变量以便在其上运行findstr之后我获得版本的变量,但findstr无法使用它来查找字符串在txt文件中。

我做了什么:我使用此代码获取ver并将其另存为var

@echo off
setlocal EnableDelayedExpansion
for /f "tokens=2 delims==" %%G in ('wmic os get Caption /value') do ( 
    set winEdition=%%G
    )
echo !winEdition!
endlocal
goto :eof

输出:Microsoft Windows 7 Enterprise

但是,如果我使用IF var运行findstr语句或!winEdition!,则IF并且"未找到字符串"如果我findstr我得到了一个txt文件的变量,那么echo也会被@echo OFF setlocal EnableDelayedExpansion set "winEdition=" for /f "tokens=2 delims==" %%G in ('wmic os get Caption /value') do ( set winEdition=%%G ) set numbers= for /F "delims=:" %%a in ('findstr /I /N /C:"!winEdition!" serials.txt') do ( set /A after=%%a+1 set "numbers=!numbers!!after!: " ) rem Search for the lines for /F "tokens=1* delims=:" %%a in ('findstr /N "^" serials.txt ^| findstr /B "%numbers%"') do ( echo %%b ) endlocal goto :eof "牣獯景⁴楗摮睯‷湅湅灲楲††#"在txt文件中,所以我认为它的编码问题,但我无法找到解决方法。 更多细节:完整代码假设从上面的代码中获取var,在txt文件中搜索字符串并返回下一行完整代码:

library(dplyr)    
dataset1 <- data.frame(Var_A = 1:10, Var_B = 100:109)    
dataset2 <- data.frame(Var_A = 11:20, Var_C = 200:209)    
dataset_new <- full_join(dataset1, dataset2)    
dataset_new

代码的第二部分工作并使用字符串和var进行测试我想进一步自动化它。感谢您的帮助我也愿意接受其他方法来获得结果

2 个答案:

答案 0 :(得分:0)

wmic会打印一些额外的“空”行(1),这会覆盖您的值(使用echo on观看)

@echo off
setlocal 
set "winEdition="
for /f "tokens=2 delims==" %%G in ('wmic os get Caption /value') do ( 
    if not defined winEdition set winEdition=%%G
    )
echo %winEdition%

(1)在屏幕上他们似乎是空的,但从技术上讲他们不是。它们包含一个褶皱的断线,引起很多头痛......

答案 1 :(得分:0)

嗨,我再次找到答案!!!所以我只是使用了一个不同的命令来找到win版本,并且版本归功于@LotPings,它比wmic慢一点,但它每次都能保持一致。 代码:

@echo off
setlocal EnableDelayedExpansion
for /f "tokens=4-6" %%a in ('"systeminfo | find /i "OS Name""') do (
    set "ver=%%a %%b %%c"
    )

set "numbers="
for /F "delims=:" %%a in ('findstr /I /N /C:"!ver!" serials.txt') do (
   set /A after=%%a+1
   set "numbers=!numbers!!after!: "
)

for /F "tokens=1* delims=:" %%a in ('findstr /N "^" serials.txt ^| findstr /B "%numbers%"') do (
    echo %%b 
    )

if "%ver%" equ "Windows 10 Pro"  echo YES 
endlocal
goto :eof

谢谢大家的帮助和建议!

PS。 serials.txt只是用记事本编码UTF-8创建的普通文本文件,内容只是:

Windows 10 Pro  
XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
Windows 7 Pro...

IF只是另一项检查,它在原始代码中有效,问题不在于第二部分,也不在于serials.txt,因为我无法将!winEdition!与{{1}进行比较声明。

BTW发现我原来的解决方案问题与我上面找到的问题有关 问题是错误的IF解决方案:

token=