- wmic quit>nul 2>nul||(echo 系统中没有安装wmic&pause&exit)
- for /f "delims=" %%a in ('wmic os list full 2^>nul') do set \x0D=%%a
- echo 回车符保存在 \x0D 变量中,使用时请开启变量延迟
复制代码 与 zqz 版主的旧作中不同的是,ipconfig 命令只有在 xp 下才会出现多余回车符,而 wmic 命令则更为通用,不过精简版系统可能无此命令。
由于回车符的作用是退至行首,所以特效中就可以利用这个特性省下大量的退格符和 cls 了:- @echo off&setlocal enabledelayedexpansion
- set x=www.bathom.net
- set d=WWW.BATHOM.NET
- set "k= "
- for /f "delims=" %%a in ('wmic os list full 2^>nul') do set \x0D=%%a
- echo 动画效果:
- for /l %%a in () do (
- for %%b in (x k) do (
- for /l %%c in (0 1 14) do (
- set /p=_!\x0D!!%%b:~0,%%c!!d:~%%c,2!!\x0D!<nul
- ping /n 1 localhost>nul
- )
- )
- )
- pause>nul
复制代码 系统自带命令中,唯一能够设置变量的只有 set 命令,但是 set 命令又是以输入中的回车换行作为终止输入的标志,所以用常规办法设置的变量都是一行一行的。
但可以通过分别获取获取回车符和换行符再一同设置到变量中来达到在变量中跨行保存内容的效果,不过保存的文件内容长度最多不能超过 8190 字节。- @echo off&setlocal enabledelayedexpansion
- set \x0A=^
-
-
- for /f "delims=" %%a in ('wmic os list full 2^>nul') do set \x0D=%%a
- for /f "tokens=1* delims=:" %%a in ('tasklist^|findstr /n .*') do (
- set list=!list!!\x0D!!\x0A!%%b
- )
- echo 全文内容如下:!list:~2!
- ::把 tasklist 命令的输出保存在 list 变量中
- pause
复制代码
- @echo off&setlocal enabledelayedexpansion
- set \x0A=^
-
-
- for /f "delims=" %%a in ('wmic os list full 2^>nul') do set \x0D=%%a
- (for /l %%a in (1 1 13) do (
- set in=
- set /p in=
- set str=!str!!\x0D!!\x0A!!in!
- ))<%0
- echo 全文内容如下:!str!
- pause
- ::把自身内容保存在 str 变量中
复制代码 当然,我们也可以只用换行符来断行,设置为变量后连带换行符输出到文件,再用 more 命令补足回车符,效果是一样的,所以说作为一个新技巧,它的价值并不是很大,但是这个效果的实现这似乎推翻了我原来的“set /p 命令在执行过程中会自动对输入断行并提取”的猜测,set /p 命令到底是何时对输入进行断行的呢?这个动作竟然发生在变量延迟之前?我又迷茫了... |