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

[其他] [分享]批处理在 win7 下获取回车符

  1. wmic quit>nul 2>nul||(echo 系统中没有安装wmic&pause&exit)
  2. for /f "delims=" %%a in ('wmic os list full 2^>nul') do set \x0D=%%a
  3. echo 回车符保存在 \x0D 变量中,使用时请开启变量延迟
复制代码
与 zqz 版主的旧作中不同的是,ipconfig 命令只有在 xp 下才会出现多余回车符,而 wmic 命令则更为通用,不过精简版系统可能无此命令。

由于回车符的作用是退至行首,所以特效中就可以利用这个特性省下大量的退格符和 cls 了:
  1. @echo off&setlocal enabledelayedexpansion
  2. set x=www.bathom.net
  3. set d=WWW.BATHOM.NET
  4. set "k=              "
  5. for /f "delims=" %%a in ('wmic os list full 2^>nul') do set \x0D=%%a
  6. echo 动画效果:
  7. for /l %%a in () do (
  8.         for %%b in (x k) do (
  9.                 for /l %%c in (0 1 14) do (
  10.                         set /p=_!\x0D!!%%b:~0,%%c!!d:~%%c,2!!\x0D!<nul
  11.                         ping /n 1 localhost>nul
  12.                 )
  13.         )
  14. )
  15. pause>nul
复制代码
系统自带命令中,唯一能够设置变量的只有 set 命令,但是 set 命令又是以输入中的回车换行作为终止输入的标志,所以用常规办法设置的变量都是一行一行的。

但可以通过分别获取获取回车符和换行符再一同设置到变量中来达到在变量中跨行保存内容的效果,不过保存的文件内容长度最多不能超过 8190 字节。
  1. @echo off&setlocal enabledelayedexpansion
  2. set \x0A=^
  3. for /f "delims=" %%a in ('wmic os list full 2^>nul') do set \x0D=%%a
  4. for /f "tokens=1* delims=:" %%a in ('tasklist^|findstr /n .*') do (
  5.         set list=!list!!\x0D!!\x0A!%%b
  6. )
  7. echo 全文内容如下:!list:~2!
  8. ::把 tasklist 命令的输出保存在 list 变量中
  9. pause
复制代码
  1. @echo off&setlocal enabledelayedexpansion
  2. set \x0A=^
  3. for /f "delims=" %%a in ('wmic os list full 2^>nul') do set \x0D=%%a
  4. (for /l %%a in (1 1 13) do (
  5.         set in=
  6.         set /p in=
  7.         set str=!str!!\x0D!!\x0A!!in!
  8. ))<%0
  9. echo 全文内容如下:!str!
  10. pause
  11. ::把自身内容保存在 str 变量中
复制代码
当然,我们也可以只用换行符来断行,设置为变量后连带换行符输出到文件,再用 more 命令补足回车符,效果是一样的,所以说作为一个新技巧,它的价值并不是很大,但是这个效果的实现这似乎推翻了我原来的“set /p 命令在执行过程中会自动对输入断行并提取”的猜测,set /p 命令到底是何时对输入进行断行的呢?这个动作竟然发生在变量延迟之前?我又迷茫了...
1

评分人数

  1. ::copy/z 法获取回车符:
  2. @echo off&setlocal enabledelayedexpansion
  3. for /f %%a in ('copy/z %~fs0 nul')do set cr=%%a
  4. set/p=#####!cr!@@
复制代码
更多特殊字符通用方法获取见:http://www.bathome.net/thread-12347-1-2.html
2

评分人数

TOP

2# plp626


这个果然更好!高效、通用,win7 下已测可用

TOP

返回列表