标题: [文本处理] [已解决]这段代码为什么被跳过不能执行?只能被调用 [打印本页]
作者: aztec 时间: 2018-6-7 10:50 标题: [已解决]这段代码为什么被跳过不能执行?只能被调用
本帖最后由 aztec 于 2018-6-8 00:15 编辑
@echo off & setlocal enabledelayedexpansion
for /f "delims=g" %%a in ('cmd /u /cEcho,有') do set "Tab=%%a"
set w=wmic diskdrive where "MediaType like 'fixed%%'"
set "w=%w% get DeviceID^,Model^,Size"
for /f "tokens=1*delims==" %%i in ('%w% /value ^| find "="') do (
if /i "%%i" == "DeviceID" set /a n+=1
set "%%i!n!=%%j"
)
set "w1=wmic path Win32_DiskDriveToDiskPartition get Antecedent^,Dependent"
set "w2=wmic path Win32_LogicalDiskToPartition get Antecedent^,Dependent"
(for /l %%i in (1 1 !n!) do (
call :GetSize !Size%%i!000 size
if !size! gtr 102400 (set /a size/=1024 & set "G= GB") else set "G= MB"
set /p=硬盘%%i:%Tab%<nul
set /p=大小:!size:~,-2!.!size:~-2!!G!%Tab%<nul
set /p=型号:!Model%%i!<nul
echo,
for /f tokens^=4delims^=^" %%a in ('%w1% ^| find /i """!DeviceID%%i!"""') do (
for /f tokens^=4delims^=^" %%b in ('%w2%^|find /i """%%a"""') do (
set "w3=wmic logicaldisk where "Name='%%b'" get FreeSpace^,Size"
for /f "tokens=1,2" %%c in ('!w3!^|findstr [0-9]') do (
call :GetSize %%c000 free
call :GetSize %%d000 size
set /a used=size-free
if !size! gtr 102400 (
set /a size/=1024,used/=1024 & set "G= GB"
) else set "G= MB"
set /a used=1000*used/size
if "!used:~,-1!" == "" set "used=0!used!"
set /p=分区%%b%Tab%<nul
set /p=大小:!size:~,-2!.!size:~-2!!G!%Tab%<nul
if !free! gtr 102400 (
set /a free/=1024 & set "G= GB"
) else set "G= MB"
set /p=剩余:!free:~,-2!.!free:~-2!!G!%Tab%<nul
set /p=使用率:!used:~,-1!.!used:~-1!%%<nul
echo,
)
)
)
echo,
))
pause & exit/b
:GetSize
set "num=%1" & set "n=" & set "%2="
for %%a in (16 8 4 2 1) do (
if not "!num:~%%a!"=="" set /a n+=%%a & set "num=!num:~%%a!"
)
set "num=%1" & set /a n-=6
for /l %%a in (!n! -1 1) do (
set "s=!num:~,-%%a!"
if "!s:~,1!" == "0" set "s=!s:~1!"
set /a m=s%%1048576,s/=1048576
set "%2=!%2!!s!"
set "num=!m!!num:~-%%a!"
)
if not defined %2 (
set "%2=!num:~,-1!"
) else if "!%2:~,1!" == "0" set "%2=!%2:~1!"
这段代码,我想用在自己的bat中,但是如果是直接放进去,不管是放在头尾中间什么地方都不行,直接跳过了,唯一方法是只能将其保存为bat,用call调用,应该是环境变量的问题,但不知道怎么修改,还请各位老师赐教
作者: Batcher 时间: 2018-6-7 14:17
把你测试的完整代码发出来看看
作者: aztec 时间: 2018-6-7 14:40
本帖最后由 aztec 于 2018-6-7 14:47 编辑
把你测试的完整代码发出来看看
Batcher 发表于 2018-6-7 14:17
就接着昨晚上的代码而已,没啥特殊
上面这段代码之后就接着以下代码:
@echo off
set /p "_path=请输入路径:"
set /p "name=请输入文件名称:"
echo 你的文件路径和名称是:%_path%%name%.txt
if not exist "%_path%" md "%_path%"
if exist "%_path%%name%.txt" (goto :A) else (goto :B)
pause&exit
:A
ECHO;文件存在
pause&goto:eof
:B
ECHO;文件不存在
pause&goto:eof
我的原意是先通过上面一楼的代码显示硬盘各分区的剩余空间,然后就选择在哪个空间比较大的分区建立文件夹输出文件,但是一楼的代码不管放在什么位置,都是跳过了不执行,只能保存为另一bat,再用call调用bat
作者: yhcfsr 时间: 2018-6-7 16:54
回复 3# aztec
要么去1群,要么加QQ,我发个代码给你.你这整得好复杂,看得头晕.
作者: WHY 时间: 2018-6-7 18:43
回复 3# aztec
把顶楼的 pause & exit/b 这一行删掉,再把你的代码插入到删掉的 pause & exit/b 这个位置。
作者: aztec 时间: 2018-6-7 19:20
回复 aztec
把顶楼的 pause & exit/b 这一行删掉,再把你的代码插入到删掉的 pause & exit/b 这 ...
WHY 发表于 2018-6-7 18:43
谢谢啦!问题解决了! 可以运行了,确实牛!佩服啊!论坛卧虎藏龙,强中更有强中手
作者: aztec 时间: 2018-6-7 19:23
回复 aztec
要么去1群,要么加QQ,我发个代码给你.你这整得好复杂,看得头晕.
yhcfsr 发表于 2018-6-7 16:54
谢谢啦!已经解决了,感谢您的支持!
作者: yhcfsr 时间: 2018-6-7 19:30
本帖最后由 yhcfsr 于 2018-6-7 20:03 编辑
- @set @n=0/*&echo off
- for /f "delims=" %%a in ('Wmic Logicaldisk Get Name^|cscript -nologo -e:jscript "%~f0"') do (
- echo;%%a
- )
- set /p "_path=请输入路径:"
- set /p "name=请输入文件名称:"
- echo 你的文件路径和名称是:%_path%%name%.txt
-
- if not exist "%_path%" md "%_path%"
- if exist "%_path%%name%.txt" (goto :A) else (goto :B)
-
- pause&exit /b
-
- :A
- ECHO;文件存在
- pause&goto:eof
-
- :B
- ECHO;文件不存在
- pause&goto:eof
-
- */
-
- var fso=new ActiveXObject('Scripting.FileSystemObject');
- WSH.StdIn.SkipLine();
- var drvSize=0,maxDrv='';
- while((drv=WSH.StdIn.ReadLine()).match(':')){
- drv=fso.GetDrive(fso.GetDriveName(drv));
- fs=(drv.FreeSpace)/1024/1024;
- if(fs>drvSize){drvSize=fs;maxDrv=drv;}
- switch(fs<1024){
- case true:
- fs=fs.toString().replace(/(\d+\.\d{2}).*/,'$1');//MB->GB,取2位小数
- WSH.Echo(drv+' '+fs+' MB');break;
- default:
- fs=(fs/1024).toString().replace(/(\d+\.\d{2}).*/,'$1');//MB->GB,取2位小数
- WSH.Echo(drv+' '+fs+' GB');
- }
- }
- WSH.Echo('建议分区 '+maxDrv);
复制代码
作者: aztec 时间: 2018-6-7 19:45
回复 8# yhcfsr
Microsoft JScript 运行时错误: 磁盘没有准备好
C: 7.84 GB
D: 2.04 GB
E: 3.22 GB
F: 3.23 GB
G: 31.16015625 MB
H: 3.52 GB
I: 11.08 GB
请输入路径:
代码很棒,虽然还是提示有错误,尽管有些瑕疵,但是已经很好了,谢谢啦!
作者: yhcfsr 时间: 2018-6-7 20:10
回复 9# aztec
代码修改:MB显示取两位小数点.
至于你说的问题,原因还不清楚,也可能是光驱问题,或者其他磁盘原因.没办法重现无法测试.我这边是测试通过的.
作者: aztec 时间: 2018-6-7 21:40
回复 aztec
代码修改:MB显示取两位小数点.
至于你说的问题,原因还不清楚,也可能是光驱问题,或者 ...
yhcfsr 发表于 2018-6-7 20:10
好的,不管怎样还是谢谢您!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |