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

[文本处理] [已解决]批处理获取文件大小在括号的外面该咋弄呢?

  1. @echo off
  2. for %%i in ("1.txt") do (
  3. set "fz=%%~zi"
  4. setlocal enabledelayedexpansion
  5. if !fz! lss 1024 (
  6. echo !fz! Byte
  7. ) else (
  8. if !fz! lss 1048576 (
  9. set /a fz=!fz!/1024&echo !fz! KB
  10. ) else (
  11. set /a fz=!fz!/1048576&echo !fz! MB
  12. )
  13. )
  14. endlocal
  15. )
  16. echo 文件大小为
  17. pause
复制代码
要求:echo 文件大小为   这个在括号的外面
并要求保留两位小数,和文件的实际大小要一样的那种
1

评分人数

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

本帖最后由 techon 于 2011-5-25 22:38 编辑

setlocal 和 endlocal 应该放在for 外面
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in ("a.bat") do (
  4.          set fz=%%~zi
  5.          if !fz! lss 1024 (
  6.                  echo !fz! Byte
  7.          ) else (
  8.                  if !fz! lss 1048576 (
  9.                          call :_div !fz! 1024 2
  10.                          set fz=!quo!KB&echo !fz!
  11.                  ) else (
  12.                          call :_div !fz! 1048576 2
  13.                          set fz=!quo!MB&echo !fz!
  14.                  )
  15.          )
  16. )
  17. echo 文件大小为 %fz%
  18. endlocal
  19. pause&goto :EOF
  20. rem 除法计算子程序
  21. :_div
  22.   if "%1"=="" echo 请输入被除数(参数 %%^1)&goto :EOF
  23.   if "%2"=="" echo 请输入除数(参数 %%^2)&goto :EOF
  24.   SETLOCAL ENABLEDELAYEDEXPANSION
  25.   set Maxd=2147483647&set scp=0&set ded=%1&set dvr=%2&set quo=&set psc=%3
  26.   if "%psc%"=="" set psc=%Maxd%
  27.   if %dvr% equ 0 ENDLOCAL&echo 错误,除数为零!&goto :EOF
  28.   if %ded% equ 0 ENDLOCAL&set quo=0&goto :EOF
  29.   if "%ded%"=="%1" (
  30.     if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
  31.   ) else (
  32.     echo 参数 %%^1 输入错误或数值超限
  33.     if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
  34.   )
  35.   :divbg
  36.   set/a quo=ded/dvr, rdd=quo*dvr
  37.   if %rdd% neq %ded% (
  38.     if %ded% leq %Maxd:~0,-1% (
  39.       if %scp% lss %psc% set ded=%ded%0&set/a scp+=1&goto :divbg
  40.     )
  41.   )
  42.   if %quo% equ 0 ENDLOCAL&set quo=0&goto :EOF
  43.   if %scp% neq 0 (
  44.     if "!quo:~-%scp%!"=="!quo!" (
  45.       set quo=00000000%quo%&set quo=0.!quo:~-%scp%!
  46.     ) else (
  47.       set quo=!quo:~0,-%scp%!.!quo:~-%scp%!
  48.     )
  49.   )
  50.   ENDLOCAL&set quo=%quo%
  51. goto :EOF
复制代码
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

要求:echo 文件大小为   这个在括号的外面

楼主真的不爱学习的态度让我我再次无语。。。
***共同提高***

TOP

2# techon

高手就是高手啊,为什么MB以上的文件提示运算符不存在呢,是不是需要修改一下呢

TOP

本帖最后由 techon 于 2011-5-25 22:33 编辑
2# techon

高手就是高手啊,为什么MB以上的文件提示运算符不存在呢,是不是需要修改一下呢
wh1234567 发表于 2011-5-25 18:23


高手 不敢当,其实你自己好好弄也能弄好

这行
  1.                          set /a fz=!quo!MB&echo !fz!
复制代码
set /a 改为set
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

本帖最后由 wh1234567 于 2011-5-25 23:57 编辑

5# techon
非常感谢高手,顺便问问这个批处理可以查看任意文件大小吗?例如GB级的文件,哦明白了,要想查看GB就得再加GB的代码吧

TOP

6# wh1234567


可以自己写大数运算的代码,也可以调用VBS来计算。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 wh1234567 于 2011-5-26 01:12 编辑

我将这个查看文件大小的批处理添加到我的另外一个批处理里,命令代码很多个,当这个命令处理完毕后就不能自动进入下一个命令,请问如何弄啊?哪里需要修改一下,我的那个批处理代码里没有一个标签,所以就自动逐一执行命令,但执行到这个批处理命令时就再执行不下去了,需要如何修改?
能不能将
echo 文件大小为 %fz%
pause
这2行放到代码的最后面?咋修改一下且不影响换算效果呢

TOP

8# wh1234567


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

TOP

本帖最后由 wh1234567 于 2011-5-26 01:19 编辑

将中间的
echo 文件大小为 %fz%
endlocal
pause&goto :EOF
这3行去掉。
能不能将
echo 文件大小为 %fz%
pause
这2行放到代码的最后面?咋修改一下且不影响换算效果呢,

TOP

本帖最后由 techon 于 2011-5-26 02:06 编辑

echo 文件大小为 %fz%
去掉 endlocal
pause
去掉 &goto :EOF

变为
echo 文件大小为 %fz%
pause


确保将这部分放到你的文件的最后部分,也就是你的代码后面
  1. rem 注意这行 goto :EOF
  2. goto :EOF
  3. rem 除法计算子程序
  4. :_div
  5.   if "%1"=="" echo 请输入被除数(参数 %%^1)&goto :EOF
  6.   if "%2"=="" echo 请输入除数(参数 %%^2)&goto :EOF
  7.   SETLOCAL ENABLEDELAYEDEXPANSION
  8.   set Maxd=2147483647&set scp=0&set ded=%1&set dvr=%2&set quo=&set psc=%3
  9.   if "%psc%"=="" set psc=%Maxd%
  10.   if %dvr% equ 0 ENDLOCAL&echo 错误,除数为零!&goto :EOF
  11.   if %ded% equ 0 ENDLOCAL&set quo=0&goto :EOF
  12.   if "%ded%"=="%1" (
  13.     if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
  14.   ) else (
  15.     echo 参数 %%^1 输入错误或数值超限
  16.     if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
  17.   )
  18.   :divbg
  19.   set/a quo=ded/dvr, rdd=quo*dvr
  20.   if %rdd% neq %ded% (
  21.     if %ded% leq %Maxd:~0,-1% (
  22.       if %scp% lss %psc% set ded=%ded%0&set/a scp+=1&goto :divbg
  23.     )
  24.   )
  25.   if %quo% equ 0 ENDLOCAL&set quo=0&goto :EOF
  26.   if %scp% neq 0 (
  27.     if "!quo:~-%scp%!"=="!quo!" (
  28.       set quo=00000000%quo%&set quo=0.!quo:~-%scp%!
  29.     ) else (
  30.       set quo=!quo:~0,-%scp%!.!quo:~-%scp%!
  31.     )
  32.   )
  33.   ENDLOCAL&set quo=%quo%
  34. goto :EOF
复制代码
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

本帖最后由 wh1234567 于 2011-5-26 02:23 编辑

11# techon


不行,被pause&goto :EOF这个执行完毕后就阻止了,无法继续下面其他命令,我的批处理代码里每个命令都没有pause,只有在最后面才有这个pause,如果将这段代码放在最后不就等于无效了吗,如果放在pause的前面的话这个换算的代码也无效了好像,我的意思是只有将你写好的这个完整代码归纳在一起,只是将
echo 文件大小为 %fz%
pause
修改后放在你的代码的最后面,然后我才能顺利添加到我的代码里,要求你的代码中间去掉pause

TOP

本帖最后由 techon 于 2011-5-26 02:37 编辑
如果将这段代码放在最后不就等于无效了吗,如果放在pause的前面的话这个换算的代码也无效了好像

谁说的?在前面要用到 call :_div

还是没听懂我的意思
把下面这段代码放到你批处理的最后
  1. rem 注意这行 goto :EOF
  2. goto :EOF
  3. rem 除法计算子程序
  4. :_div
  5.   if "%1"=="" echo 请输入被除数(参数 %%^1)&goto :EOF
  6.   if "%2"=="" echo 请输入除数(参数 %%^2)&goto :EOF
  7.   SETLOCAL ENABLEDELAYEDEXPANSION
  8.   set Maxd=2147483647&set scp=0&set ded=%1&set dvr=%2&set quo=&set psc=%3
  9.   if "%psc%"=="" set psc=%Maxd%
  10.   if %dvr% equ 0 ENDLOCAL&echo 错误,除数为零!&goto :EOF
  11.   if %ded% equ 0 ENDLOCAL&set quo=0&goto :EOF
  12.   if "%ded%"=="%1" (
  13.     if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
  14.   ) else (
  15.     echo 参数 %%^1 输入错误或数值超限
  16.     if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
  17.   )
  18.   :divbg
  19.   set/a quo=ded/dvr, rdd=quo*dvr
  20.   if %rdd% neq %ded% (
  21.     if %ded% leq %Maxd:~0,-1% (
  22.       if %scp% lss %psc% set ded=%ded%0&set/a scp+=1&goto :divbg
  23.     )
  24.   )
  25.   if %quo% equ 0 ENDLOCAL&set quo=0&goto :EOF
  26.   if %scp% neq 0 (
  27.     if "!quo:~-%scp%!"=="!quo!" (
  28.       set quo=00000000%quo%&set quo=0.!quo:~-%scp%!
  29.     ) else (
  30.       set quo=!quo:~0,-%scp%!.!quo:~-%scp%!
  31.     )
  32.   )
  33.   ENDLOCAL&set quo=%quo%
  34. goto :EOF
复制代码
这后面的代码不会被执行
除非这后面有标签 前面有goto 标签或call 标签
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

本帖最后由 wh1234567 于 2011-5-26 03:04 编辑

13# techon

终于搞定了,太感谢大师了,
另外再请教一个问题:
for /f "tokens=1* delims= " %%a in ('find /v /c "" %dkou%_%smfs%已整理_%max%_[%curtime%].txt') do for /f "tokens=1,2 delims=:" %%c in ("%%b") do ren "%%c" "%%~nc_%%d行.txt"
这段代码是给文件重命名的(是给变量文件名%dkou%_%smfs%已整理_%max%_[%curtime%].txt添加一个行数为新的文件名),我想再在最后面加一个在DOS窗口上也同时显示的功能:

echo 新文件名为:%xxx%
pause
的功能,如何实现?是不是算是取文件名为变量?咋弄呢

TOP

... 请楼上自己动动脑子好不好?

ren 是重命名命令 用法  ren 原文件名 新文件名
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

返回列表