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

[新手练习]批处理变量的字节大小

计算出输入变量的字节数,不是变量长度,而是字节数。英文半角等占1字节,中文全角等占2字节

目的:掌握 set /p 和 for 的用法

要求:等待用户输入,并计算出输入变量的字节数,显示出来。暂不考虑特殊字符过滤问题。

评分:代码可读性 1 分;
   首个新方法 7 分,第二个 6 分,依次类推,最少 2 分;
   一人可多种方法,新方法追加 3 分,已经出现过的方法追加 1 分。
   (请版主帮忙评分)

参考答案:(拖拽代码框即可呈现)

@echo off
set /p a=请输入:
echo b%a%b>a.txt
for /f %%a in ("a.txt") do set /a size=%%~za-4
echo %size%
del /q a.txt
pause>nul
2

评分人数

  1. @echo off
  2. :bgn
  3. set /p str=字符串:
  4. for /f "skip=1 delims=:" %%a in ('^(echo.%str%^&echo.^)^|findstr /o .') do (
  5.   set /a Bytes=%%a-3
  6. )
  7. echo 字节数: %Bytes%
  8. echo. & goto bgn
复制代码
4

评分人数

    • zxd11097: 输入^以后,批处理就退出了 。技术 + 1
    • wxcute: 难道传说中的“出神入化”PB + 5
    • skuny: !!!!!!高PB + 2
    • defanive: 利用Findstr的/o,好方法PB + 6

TOP

能处理特殊符号:

  1. @echo off
  2. :bgn
  3. set /p input=字符串:
  4. call set/p="%%input%%"<nul>%temp%\a.txt
  5. for %%a in (%temp%\a.txt) do echo 字节数: %%~za
  6. echo. & goto bgn
复制代码
后发现有些特殊字符不能处理,如 "<,可修改成:
  1. @echo off&setlocal enabledelayedexpansion
  2. :bgn
  3. set /p input=字符串:
  4. set/p="!input!"<nul>%temp%\a.txt
  5. for %%a in (%temp%\a.txt) do echo 字节数: %%~za
  6. echo. & goto bgn
复制代码

[ 本帖最后由 tireless 于 2009-1-16 15:12 编辑 ]
2

评分人数

TOP

另一种过滤特殊字符的思路:用set的%PATH:str1=str2%替换功能把特殊字符替换成普通字符(例如字母),这样总大小还是不变,但可以正常echo >

TOP

TOP

回复 1楼 的帖子

  1. @echo off
  2. cls
  3. set size=0
  4. echo ╭︿︿︿╮
  5. echo {/ o o /}
  6. echo ( (oo) )
  7. echo ︶ ︶︶
  8. @echo off
  9. set /p var=input
  10. set var > var.txt
  11. for /f %%i in ("var.txt") do set /a "size=%%~zi-6"
  12. echo %size%
  13. set size=
  14. del var.txt
  15. pause
复制代码
看了楼主的答案,模仿了一个,但是问题出来了,为什么我这么写是 -6而不是-4.

[ 本帖最后由 myzwd 于 2009-2-28 18:51 编辑 ]
1

评分人数

    • wxcute: 用SET 变量名,来显示变量时会把名字和值一 ...PB + 3

TOP

回复 6楼 的帖子

把倒数第二行注释掉,就会发现你的变量长度和楼主的不同。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

哎。新手题各位大神就别来凑热闹了。搞得小弟无法下叉。

TOP

返回列表