标题: [文本处理] [已解决]批处理获取文件大小在括号的外面该咋弄呢? [打印本页]
作者: wh1234567 时间: 2011-5-24 11:11 标题: [已解决]批处理获取文件大小在括号的外面该咋弄呢?
- @echo off
- for %%i in ("1.txt") do (
- set "fz=%%~zi"
- setlocal enabledelayedexpansion
- if !fz! lss 1024 (
- echo !fz! Byte
- ) else (
- if !fz! lss 1048576 (
- set /a fz=!fz!/1024&echo !fz! KB
- ) else (
- set /a fz=!fz!/1048576&echo !fz! MB
- )
- )
- endlocal
- )
- echo 文件大小为
- pause
复制代码
要求:echo 文件大小为 这个在括号的外面
并要求保留两位小数,和文件的实际大小要一样的那种
作者: techon 时间: 2011-5-24 13:42
本帖最后由 techon 于 2011-5-25 22:38 编辑
setlocal 和 endlocal 应该放在for 外面- @echo off
- setlocal enabledelayedexpansion
- for %%i in ("a.bat") do (
- set fz=%%~zi
- if !fz! lss 1024 (
- echo !fz! Byte
- ) else (
- if !fz! lss 1048576 (
- call :_div !fz! 1024 2
- set fz=!quo!KB&echo !fz!
- ) else (
- call :_div !fz! 1048576 2
- set fz=!quo!MB&echo !fz!
- )
- )
- )
- echo 文件大小为 %fz%
- endlocal
- pause&goto :EOF
-
- rem 除法计算子程序
- :_div
- if "%1"=="" echo 请输入被除数(参数 %%^1)&goto :EOF
- if "%2"=="" echo 请输入除数(参数 %%^2)&goto :EOF
- SETLOCAL ENABLEDELAYEDEXPANSION
- set Maxd=2147483647&set scp=0&set ded=%1&set dvr=%2&set quo=&set psc=%3
- if "%psc%"=="" set psc=%Maxd%
- if %dvr% equ 0 ENDLOCAL&echo 错误,除数为零!&goto :EOF
- if %ded% equ 0 ENDLOCAL&set quo=0&goto :EOF
- if "%ded%"=="%1" (
- if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
- ) else (
- echo 参数 %%^1 输入错误或数值超限
- if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
- )
- :divbg
- set/a quo=ded/dvr, rdd=quo*dvr
- if %rdd% neq %ded% (
- if %ded% leq %Maxd:~0,-1% (
- if %scp% lss %psc% set ded=%ded%0&set/a scp+=1&goto :divbg
- )
- )
- if %quo% equ 0 ENDLOCAL&set quo=0&goto :EOF
- if %scp% neq 0 (
- if "!quo:~-%scp%!"=="!quo!" (
- set quo=00000000%quo%&set quo=0.!quo:~-%scp%!
- ) else (
- set quo=!quo:~0,-%scp%!.!quo:~-%scp%!
- )
- )
- ENDLOCAL&set quo=%quo%
- goto :EOF
复制代码
作者: batman 时间: 2011-5-24 17:34
要求:echo 文件大小为 这个在括号的外面
楼主真的不爱学习的态度让我我再次无语。。。
作者: wh1234567 时间: 2011-5-25 18:23
2# techon
高手就是高手啊,为什么MB以上的文件提示运算符不存在呢,是不是需要修改一下呢
作者: techon 时间: 2011-5-25 22:30
本帖最后由 techon 于 2011-5-25 22:33 编辑
2# techon
高手就是高手啊,为什么MB以上的文件提示运算符不存在呢,是不是需要修改一下呢
wh1234567 发表于 2011-5-25 18:23
高手 不敢当,其实你自己好好弄也能弄好
这行- set /a fz=!quo!MB&echo !fz!
复制代码
set /a 改为set
作者: wh1234567 时间: 2011-5-25 22:55
本帖最后由 wh1234567 于 2011-5-25 23:57 编辑
5# techon
非常感谢高手,顺便问问这个批处理可以查看任意文件大小吗?例如GB级的文件,哦明白了,要想查看GB就得再加GB的代码吧
作者: Batcher 时间: 2011-5-25 23:53
6# wh1234567
可以自己写大数运算的代码,也可以调用VBS来计算。
作者: wh1234567 时间: 2011-5-26 00:59
本帖最后由 wh1234567 于 2011-5-26 01:12 编辑
我将这个查看文件大小的批处理添加到我的另外一个批处理里,命令代码很多个,当这个命令处理完毕后就不能自动进入下一个命令,请问如何弄啊?哪里需要修改一下,我的那个批处理代码里没有一个标签,所以就自动逐一执行命令,但执行到这个批处理命令时就再执行不下去了,需要如何修改?
能不能将
echo 文件大小为 %fz%
pause
这2行放到代码的最后面?咋修改一下且不影响换算效果呢
作者: Batcher 时间: 2011-5-26 01:00
8# wh1234567
完整的代码贴出来看看?
作者: wh1234567 时间: 2011-5-26 01:14
本帖最后由 wh1234567 于 2011-5-26 01:19 编辑
将中间的
echo 文件大小为 %fz%
endlocal
pause&goto :EOF
这3行去掉。
能不能将
echo 文件大小为 %fz%
pause
这2行放到代码的最后面?咋修改一下且不影响换算效果呢,
作者: techon 时间: 2011-5-26 02:00
本帖最后由 techon 于 2011-5-26 02:06 编辑
echo 文件大小为 %fz%
去掉 endlocal
pause
去掉 &goto :EOF
变为
echo 文件大小为 %fz%
pause
确保将这部分放到你的文件的最后部分,也就是你的代码后面- rem 注意这行 goto :EOF
- goto :EOF
- rem 除法计算子程序
- :_div
- if "%1"=="" echo 请输入被除数(参数 %%^1)&goto :EOF
- if "%2"=="" echo 请输入除数(参数 %%^2)&goto :EOF
- SETLOCAL ENABLEDELAYEDEXPANSION
- set Maxd=2147483647&set scp=0&set ded=%1&set dvr=%2&set quo=&set psc=%3
- if "%psc%"=="" set psc=%Maxd%
- if %dvr% equ 0 ENDLOCAL&echo 错误,除数为零!&goto :EOF
- if %ded% equ 0 ENDLOCAL&set quo=0&goto :EOF
- if "%ded%"=="%1" (
- if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
- ) else (
- echo 参数 %%^1 输入错误或数值超限
- if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
- )
- :divbg
- set/a quo=ded/dvr, rdd=quo*dvr
- if %rdd% neq %ded% (
- if %ded% leq %Maxd:~0,-1% (
- if %scp% lss %psc% set ded=%ded%0&set/a scp+=1&goto :divbg
- )
- )
- if %quo% equ 0 ENDLOCAL&set quo=0&goto :EOF
- if %scp% neq 0 (
- if "!quo:~-%scp%!"=="!quo!" (
- set quo=00000000%quo%&set quo=0.!quo:~-%scp%!
- ) else (
- set quo=!quo:~0,-%scp%!.!quo:~-%scp%!
- )
- )
- ENDLOCAL&set quo=%quo%
- goto :EOF
复制代码
作者: wh1234567 时间: 2011-5-26 02:09
本帖最后由 wh1234567 于 2011-5-26 02:23 编辑
11# techon
不行,被pause&goto :EOF这个执行完毕后就阻止了,无法继续下面其他命令,我的批处理代码里每个命令都没有pause,只有在最后面才有这个pause,如果将这段代码放在最后不就等于无效了吗,如果放在pause的前面的话这个换算的代码也无效了好像,我的意思是只有将你写好的这个完整代码归纳在一起,只是将
echo 文件大小为 %fz%
pause
修改后放在你的代码的最后面,然后我才能顺利添加到我的代码里,要求你的代码中间去掉pause
作者: techon 时间: 2011-5-26 02:34
本帖最后由 techon 于 2011-5-26 02:37 编辑
如果将这段代码放在最后不就等于无效了吗,如果放在pause的前面的话这个换算的代码也无效了好像
谁说的?在前面要用到 call :_div
还是没听懂我的意思
把下面这段代码放到你批处理的最后- rem 注意这行 goto :EOF
- goto :EOF
- rem 除法计算子程序
- :_div
- if "%1"=="" echo 请输入被除数(参数 %%^1)&goto :EOF
- if "%2"=="" echo 请输入除数(参数 %%^2)&goto :EOF
- SETLOCAL ENABLEDELAYEDEXPANSION
- set Maxd=2147483647&set scp=0&set ded=%1&set dvr=%2&set quo=&set psc=%3
- if "%psc%"=="" set psc=%Maxd%
- if %dvr% equ 0 ENDLOCAL&echo 错误,除数为零!&goto :EOF
- if %ded% equ 0 ENDLOCAL&set quo=0&goto :EOF
- if "%ded%"=="%1" (
- if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
- ) else (
- echo 参数 %%^1 输入错误或数值超限
- if not "%dvr%"=="%2" ENDLOCAL&echo 参数 %%^2 输入错误或数值超限&goto :EOF
- )
- :divbg
- set/a quo=ded/dvr, rdd=quo*dvr
- if %rdd% neq %ded% (
- if %ded% leq %Maxd:~0,-1% (
- if %scp% lss %psc% set ded=%ded%0&set/a scp+=1&goto :divbg
- )
- )
- if %quo% equ 0 ENDLOCAL&set quo=0&goto :EOF
- if %scp% neq 0 (
- if "!quo:~-%scp%!"=="!quo!" (
- set quo=00000000%quo%&set quo=0.!quo:~-%scp%!
- ) else (
- set quo=!quo:~0,-%scp%!.!quo:~-%scp%!
- )
- )
- ENDLOCAL&set quo=%quo%
- goto :EOF
复制代码
这后面的代码不会被执行
除非这后面有标签 前面有goto 标签或call 标签
作者: wh1234567 时间: 2011-5-26 02:55
本帖最后由 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
的功能,如何实现?是不是算是取文件名为变量?咋弄呢
作者: techon 时间: 2011-5-26 13:44
... 请楼上自己动动脑子好不好?
ren 是重命名命令 用法 ren 原文件名 新文件名
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |