我说这是我的第一个问题,但在这里搜索了大量的答案后,我仍然无法得到我想要的东西。所以问题是:需要获取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进行测试我想进一步自动化它。感谢您的帮助我也愿意接受其他方法来获得结果!
答案 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=