需要从wmic获取第二行输出,将最后修改的命令输入变量而不写入文件

时间:2015-05-12 16:41:14

标签: wmic

(显然需要帮助)。

我有这个工作:

wmic datafile where name="%sourcepathdoubleslashnoquotes%%FileName%" get lastmodified > tmpFile.txt
set /p myvar-a= < tmpFile.txt
type tmpFile.txt | findstr /v LastModified > tmpFile2.txt
set /p myvar-b= < tmpFile2.txt
del tmpFile.txt
del tmpFile2.txt

tmpFile.txt有这个:

LastModified               
20150429124836.260625-240 

tmpFile2.txt有这个:

20150429124836.260625-240

echo %myvar% 生成此内容: 20150429124836.260625-240

如何在不写入文件的情况下让wmic命令获得“20150429124836.260625-240”? 不知何故使用“skip 1”?

(整个事情都在循环中 - 大量不必要的文件写入)

提前致谢

3 个答案:

答案 0 :(得分:0)

这是一个工作代码段(name已更改为常量值以提高可读性,也应与where "name='%sourcepathdoubleslashnoquotes%%FileName%'"子句一起使用。)

for /F "tokens=2 delims==" %%G in (
  'wmic datafile where "Name='d:\\temp\\virus.bat'" get LastModified/value'
) do for /F "tokens=*" %%x in ("%%G") do set "myvar=%%x"

for循环

的位置
  • %%G检索LastModified值;
  • %%x删除返回值中的结尾回车wmic行为:每个输出行以0x0D0D0A结尾,而不是公共0x0D0A }),请参阅下面的示例。

示例(从我的命令行窗口复制和粘贴):

==>for /F "tokens=2 delims==" %G in ('wmic datafile where "Name='d:\\temp\\virus
.bat'" get LastModified/value') do @echo "%G"
"20150512194153.372487+120

==>for /F "tokens=2 delims==" %G in ('wmic datafile where "Name='d:\\temp\\virus
.bat'" get LastModified/value') do @for /F "tokens=*" %x in ("%G") do @echo "%x"
"20150512194153.372487+120"

==>

答案 1 :(得分:0)

尤里卡!

这有效:

for / f&#34; skip = 2 tokens = 2 delims =,&#34; %% A in(&#39; wmic数据文件,其中&#34; name =&#39; D:\ DEVEL \ somefile.txt&#39;&#34; get lastmodified / format:csv&#39;)DO SET myvar = %% A

这也有效(不需要skip = 2)也是路径和名称的替换变量:

for / f&#34; tokens = 2 delims =,&#34; %% A in(&#39; wmic数据文件,其中&#34; name =&#39;%sourcepathdoubleslashnoquotes %% FileName%&#39;&#34; get lastmodified / format:csv&#39;)DO SET myvar = %% A

ECHO您修改的变量在此处:%myvar%

我的整个问题可能只是引用 - 密切注意下面的单引号和双引号 - 它的关键!此版本也使用逗号分隔,但它可以与&#34; =&#34;同样。

答案 2 :(得分:0)

感谢您输入JosefZ

我能够让这个工作:

for / F&#34;令牌= 2 delims ==&#34; %% G in(&#39; wmic datafile,其中&#34; Name =&#39;%sourcepathdoubleslashnoquotes %% FileName%&#39;&#34; get LastModified / value&#39;)do @echo %% G

输出: 20150512153513.391860-240

还有:

(虽然我不确定它们在结果方面有何不同)

for / F&#34;令牌= 2 delims ==&#34; %% G in(&#39; wmic datafile,其中&#34; Name =&#39;%sourcepathdoubleslashnoquotes %% FileName%&#39;&#34; get LastModified / value&#39;)do @for / F& #34;令牌= *&#34; %% x in(&#34; %% G&#34;)执行@echo %% x

输出: 20150512153513.391860-240

ECHO您修改的变量在此处:%myvar%