Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件-wmic-空行_Batch File_Findstr_Wmic_Vbscript_Wmi - Fatal编程技术网

Batch file 批处理文件-wmic-空行

Batch file 批处理文件-wmic-空行,batch-file,findstr,wmic,vbscript,wmi,Batch File,Findstr,Wmic,Vbscript,Wmi,查看google,我试图创建一个批处理文件,输出磁盘列表和可用空间。我找到了一个很好的解决方案,但对于列出的每个驱动器,都有一个1空间的空行(该行以空格开始,因此对于新行为CR LF)。 你有什么建议 @ECHO OFF set FILE="testOK.txt" set IP="127.0.0.1" set PC="EA" set TAB=" " SETLOCAL enableextensions (for

查看google,我试图创建一个批处理文件,输出磁盘列表和可用空间。我找到了一个很好的解决方案,但对于列出的每个驱动器,都有一个1空间的空行(该行以空格开始,因此对于新行为CR LF)。 你有什么建议

 @ECHO OFF
set FILE="testOK.txt"
set IP="127.0.0.1"
set PC="EA"
set TAB="   "
SETLOCAL enableextensions
(for /f "tokens=1-3" %%a in ('
  WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"
  ') do (       
        echo wsh.echo date ^& %TAB% ^& time ^& %TAB% ^& %ip% ^& %TAB% ^& %PC% ^& %TAB% ^& "%%b" ^& %TAB% ^& FormatNumber^(cdbl^(%%a^)/1024/1024/1024, 2^) ^& "  " ^& FormatNumber^(cdbl^(%%c^)/1024/1024/1024, 2^)^& "  GB" > "%temp%\tmp.vbs"
        
        if not "%%b"=="" (
          echo( 
          cscript //nologo "%temp%\tmp.vbs"
          del "%temp%\tmp.vbs"
    )
    
  )
) > %FILE%
示例结果:

01/07/2020  10:20:59    10.0.13.36  ADMINPC C:  4,07    69,90   GB
 
01/07/2020  10:20:59    10.0.13.36  ADMINPC E:  0,00    0,42    GB

为了保持这个主题的答案,这里有一个使用and,(not)来实现您的目标,并且不创建中间
.vbs
或所有这些变量:


Set c=CreateObject(“WScript.Network”)
Set i=GetObject(“winmgmts:”).InstancesOf(“Win32\U网络适配器配置”)
设置o=CreateObject(“Scripting.FileSystemObject”)
对于i:If n.IPEnabled中的每个n,则IP=n.IPAddress(0):End If:Next
对于o.驱动器中的每个Drv:如果Drv.IsReady=True,则
WScript.Echo日期&VBTab&Time&VBTab&IP&VBTab&c.ComputerName&VBTab&_
Drv.DriveLetter&“:”&VBTab&Round(Drv.FreeSpace/1073741824,2)和VBTab&_
圆形(图纸总尺寸/1073741824,2)和“GiB”
如果结束:下一个

echo(
写了一个空行…而且多次创建
vbs
文件效率很低。创建一次(在循环之前)和删除一次(在循环之后)效果很好!最后一个问题是,如何在文件末尾追加而不是覆盖它?将
>“testOK.txt”更改为
>“TestOk.txt”,@ FabidiBaToLoMeMy。考虑到我试图为网络中的所有PC机这样做,其想法是在共享文件夹中指向同一个文件。有一种简单的方法来检查写入已经完成还是重试?(例如,可能有2个PC同时在文件中写入,所以其中一个将失败)。如果你这样做的话,你的方法论是错误的@FabiodiaBartolomei。但是在你提出问题并且我回答了你的问题之后,在方法论方面对你进行指导是不合适的,特别是因为我的回答不太可能是其中的一部分。