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

[文本处理] [已解决]批处理怎样计算字符串?

本帖最后由 er8852973 于 2011-4-12 23:03 编辑
  1. @echo off
  2. for /f  "delims=" %%i  in (hh.txt) do (
  3. set a=%%i
  4. for %%i in (0,1,8192) do (
  5. if not !a! ==""  set b=!a:~%%i,1!&set c=%%i
  6. )
  7. echo !c!
  8. pause>nul
  9. )
  10. pause
复制代码
不知道错在哪里 执行后显示 !c!而不是显示每行的字符数 请指教

本帖最后由 terse 于 2011-4-11 11:56 编辑

这里 !a! 不会空吧  另开启变量延迟

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion&cls
  3. :start ============================================================
  4. for /f  "delims=" %%a  in (2.txt) do (
  5. call :getStrLen %%a
  6. echo !strlen!
  7. )
  8. :end ==============================================================
  9. endlocal&echo 按任意键退出&pause>nul
  10. ::(mode con cols=80 lines=25&color 07&CHCP 437&graftabl 936)>nul
  11. for /f "tokens=2" %%a in ('CHCP') do (if not "%%a"=="437" (color 07&CHCP 437&graftabl 936))>nul
  12. exit/b
  13. setlocal disabledelayedexpansion
  14. echo 退出...&ping/n 4 127.1>nul
  15. for /l %%a in (5,-1,0) do (set/p =退出... ^(%%a^)<nul&ping/n 2 127.1>nul)
  16. ::=======================MODE CODE==============================
  17. ::=======================获得字符串长度==============================
  18. ::返回值在中%strlen%
  19. :getStrLen mystr
  20. set "mystr=%~1"&set "strlen=0"
  21. if not defined mystr goto :eof
  22. for /l %%i in (0,1,8191) do (set strlen=%%i&if "!mystr:~%%i,1!"=="" (goto :eof))
  23. goto :eof
  24. ::==============END======获得字符串长度========== by hf-g ===========
  25. ::=======================END MODE===============================
复制代码

TOP

本帖最后由 hanyeguxing 于 2011-4-11 12:26 编辑

@echo off
这里加setlocal enableDelayedExpansion以开变量延迟
for /f  "delims=" %%i  in (hh.txt) do (
set a=%%i
推荐写成set "a=%%i"
for %%i in (0,1,8192) do (
外面已经用了%%i这里就不要使用相同的变量名了例如换成%%j           同时递归数列为for /l
if not !a! ==""  set b=!a:~%%i,1!&set c=%%i
这里应写成if not "!a:~%%j,1!"=="" set c=%%j
)
echo !c!
pause>nul

)
pausu
应该是pause
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /f "delims=" %%i in (hh.txt) do (
  4.         set "a=%%i"
  5.         for /l %%j in (0,1,8192) do if not "!a:~%%j,1!"=="" set c=%%j
  6.         echo !c!
  7.         pause>nul
  8. )
  9. pause
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

@echo off
setlocal EnableDelayedExpansion
for /f  "delims=" %%i  in (hh.txt) do (
set a=%%i
for  /l %%j in (0,1,8192) do (
if not !a! ==""  set b=!a:~%%j,1!&set c=%%j
)
echo !c!
pause>nul

)
pausu
我想问大家  我上面的代码错在什么地方?

TOP

5# er8852973
if not "!a:~%%j!" == ""  set b=!a:~%%j,1!&set /a c=%%j+1

TOP

6L的 我按照你的改动了 还是不行啊
@echo off
setlocal EnableDelayedExpansion
for /f  "delims=" %%i  in (hh.txt) do (
set a=%%i
for  /l %%j in (0,1,8192) do (
if not !a:~%%j,1!==""  set b=!a:~%%j,1!&set/a c=%%j+1
)
echo !c!
pause>nul

)
pausu

TOP

if not "!a:~%%j,1!"==""  ...

TOP

谢谢 各位 解决了

TOP

返回列表