找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 21236|回复: 7

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

[复制链接]
发表于 2009-1-9 23:26:06 | 显示全部楼层 |阅读模式
计算出输入变量的字节数,不是变量长度,而是字节数。英文半角等占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

评分

参与人数 2PB +11 收起 理由
wxcute + 5 原有如此好帖!
tireless + 6 学到了一个方法!

查看全部评分

发表于 2009-1-10 00:37:34 | 显示全部楼层
  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
复制代码

评分

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

查看全部评分

发表于 2009-1-10 00:53:38 | 显示全部楼层

能处理特殊符号:

  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 编辑 ]

评分

参与人数 2PB +11 收起 理由
wxcute + 5 已是相当完美
defanive + 6 好,用引号过滤!

查看全部评分

 楼主| 发表于 2009-1-10 11:24:48 | 显示全部楼层
另一种过滤特殊字符的思路:用set的%PATH:str1=str2%替换功能把特殊字符替换成普通字符(例如字母),这样总大小还是不变,但可以正常echo >
发表于 2009-1-10 16:04:51 | 显示全部楼层
发表于 2009-2-28 18:47:00 | 显示全部楼层

回复 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 编辑 ]

评分

参与人数 1PB +3 收起 理由
wxcute + 3 用SET 变量名,来显示变量时会把名字和值一 ...

查看全部评分

发表于 2009-2-28 19:04:51 | 显示全部楼层

回复 6楼 的帖子

把倒数第二行注释掉,就会发现你的变量长度和楼主的不同。
发表于 2011-11-1 15:13:32 | 显示全部楼层
哎。新手题各位大神就别来凑热闹了。搞得小弟无法下叉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:45 , Processed in 0.026670 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表