我怎样才能 运行 一个获取驱动器 space 并保持 CMD 打开的批处理文件?
How can I run a batch file which gets drive space and keeps CMD open?
我运行将其作为批处理文件
/k
cd c:\
for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs
pause
当我 运行 在 CMD 中单独使用 for 循环时,它工作得很好。但是当我尝试在批处理文件中 运行 它时,它会在我获取信息之前关闭 CMD。它也无法实际将目录更改为 c:\,但仅在将 for 循环添加到批处理文件后才更改。我是否需要预先修复循环以便 CMD 知道如何处理它?
您应该使用批处理文件来执行此操作:
当你 运行 它作为批处理文件时你应该添加符号百分号 % 到变量以转义它所以 %a
必须是 %%a
和儿子...
@echo off
for /f "tokens=1-3" %%a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%%b" ^& " free=" ^& FormatNumber^(cdbl^(%%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs
pause
我运行将其作为批处理文件
/k
cd c:\
for /f "tokens=1-3" %a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%b" ^& " free=" ^& FormatNumber^(cdbl^(%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs
pause
当我 运行 在 CMD 中单独使用 for 循环时,它工作得很好。但是当我尝试在批处理文件中 运行 它时,它会在我获取信息之前关闭 CMD。它也无法实际将目录更改为 c:\,但仅在将 for 循环添加到批处理文件后才更改。我是否需要预先修复循环以便 CMD 知道如何处理它?
您应该使用批处理文件来执行此操作:
当你 运行 它作为批处理文件时你应该添加符号百分号 % 到变量以转义它所以 %a
必须是 %%a
和儿子...
@echo off
for /f "tokens=1-3" %%a in ('WMIC LOGICALDISK GET FreeSpace^,Name^,Size ^|FINDSTR /I /V "Name"') do @echo wsh.echo "%%b" ^& " free=" ^& FormatNumber^(cdbl^(%%a^)/1024/1024/1024, 2^)^& " GiB"^& " size=" ^& FormatNumber^(cdbl^(%%c^)/1024/1024/1024, 2^)^& " GiB" > %temp%\tmp.vbs & @if not "%%c"=="" @echo( & @cscript //nologo %temp%\tmp.vbs & del %temp%\tmp.vbs
pause