[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]这段代码为什么被跳过不能执行?只能被调用

本帖最后由 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调用,应该是环境变量的问题,但不知道怎么修改,还请各位老师赐教
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

把你测试的完整代码发出来看看
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 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

TOP

回复 3# aztec


    要么去1群,要么加QQ,我发个代码给你.你这整得好复杂,看得头晕.
QQ 33892006

TOP

回复 3# aztec


    把顶楼的 pause & exit/b 这一行删掉,再把你的代码插入到删掉的 pause & exit/b 这个位置。
1

评分人数

TOP

回复  aztec


    把顶楼的 pause & exit/b 这一行删掉,再把你的代码插入到删掉的 pause & exit/b 这 ...
WHY 发表于 2018-6-7 18:43


谢谢啦!问题解决了! 可以运行了,确实牛!佩服啊!论坛卧虎藏龙,强中更有强中手

TOP

回复  aztec


    要么去1群,要么加QQ,我发个代码给你.你这整得好复杂,看得头晕.
yhcfsr 发表于 2018-6-7 16:54


谢谢啦!已经解决了,感谢您的支持!

TOP

本帖最后由 yhcfsr 于 2018-6-7 20:03 编辑
  1. @set @n=0/*&echo off
  2. for /f "delims=" %%a in ('Wmic Logicaldisk Get Name^|cscript -nologo -e:jscript "%~f0"') do (
  3. echo;%%a
  4. )
  5. set /p "_path=请输入路径:"
  6. set /p "name=请输入文件名称:"
  7. echo 你的文件路径和名称是:%_path%%name%.txt
  8. if not exist "%_path%" md "%_path%"
  9. if exist "%_path%%name%.txt" (goto :A) else (goto :B)
  10. pause&exit /b
  11. :A
  12. ECHO;文件存在
  13. pause&goto:eof
  14. :B
  15. ECHO;文件不存在
  16. pause&goto:eof
  17. */
  18. var fso=new ActiveXObject('Scripting.FileSystemObject');
  19. WSH.StdIn.SkipLine();
  20. var drvSize=0,maxDrv='';
  21. while((drv=WSH.StdIn.ReadLine()).match(':')){
  22. drv=fso.GetDrive(fso.GetDriveName(drv));
  23. fs=(drv.FreeSpace)/1024/1024;
  24. if(fs>drvSize){drvSize=fs;maxDrv=drv;}
  25. switch(fs<1024){
  26. case true:
  27. fs=fs.toString().replace(/(\d+\.\d{2}).*/,'$1');//MB->GB,取2位小数
  28. WSH.Echo(drv+' '+fs+' MB');break;
  29. default:
  30. fs=(fs/1024).toString().replace(/(\d+\.\d{2}).*/,'$1');//MB->GB,取2位小数
  31. WSH.Echo(drv+' '+fs+' GB');
  32. }
  33. }
  34. WSH.Echo('建议分区 '+maxDrv);
复制代码
QQ 33892006

TOP

回复 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
请输入路径:

代码很棒,虽然还是提示有错误,尽管有些瑕疵,但是已经很好了,谢谢啦!

TOP

回复 9# aztec


    代码修改:MB显示取两位小数点.
至于你说的问题,原因还不清楚,也可能是光驱问题,或者其他磁盘原因.没办法重现无法测试.我这边是测试通过的.
QQ 33892006

TOP

回复  aztec


    代码修改:MB显示取两位小数点.
至于你说的问题,原因还不清楚,也可能是光驱问题,或者 ...
yhcfsr 发表于 2018-6-7 20:10



    好的,不管怎样还是谢谢您!

TOP

返回列表