[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
继续放出另类解...
  1. @echo off
  2. set ip=192.168.1.1
  3. (set b=)&(set a=%ip:.=)&(if not defined b set b=%)
  4. echo %a%.%b%
  5. pause
复制代码

TOP

回复 8# 523066680


来一个
  1. @echo off
  2. %1 set ip=192.168.1.1
  3. %1 %0 : %ip:.= %&eixt/b
  4. echo %2.%3
复制代码
我蛋疼得...其实真还不如 call

TOP

回复 12# Linuxer
  1. (set b=)&(set a=%ip:.=)&(if not defined b set b=%)
复制代码
分两部分解释下:
1、(set b=)
设置 %b% 为空
2、(set a=%ip:.=)&(if not defined b set b=%)
预处理时会将 %ip% 中的 . 替换为 )&(if not defined b set b=
这样就变成了:
  1. )&(if not defined b set b=168)&(if not defined b set b=1)&(if not defined b set b=1
复制代码
加上前后缀就是:
  1. (set a=192)&(if not defined b set b=168)&(if not defined b set b=1)&(if not defined b set b=1)
复制代码
------------------------------------------------------------------------------------------------
所以整行的作用相当于执行了
  1. set b=
  2. set a=192
  3. if not defined b set b=168
  4. if not defined b set b=1
  5. if not defined b set b=1
复制代码
这样就明了了吧

TOP

本帖最后由 CrLf 于 2014-8-28 17:00 编辑

回复 13# terse


    是的~再来一个更精简的
  1. @echo off
  2. set ip=192.168.1.1
  3. (set a=%ip:.=)&&set 2>nul /a 1/!-~(b=%)
  4. echo %a%.%b%
  5. pause
复制代码
如果看不懂,去掉 @echo off 运行一下应该就差不多明白了
-~ 作用有点像 ++,用来兼容值为 0 的部分,相应的,~- 有点像 --,至于为什么...百度“按位取反”和“int 类型正负数的区别”
话说这代码可读性约等于 0,玩玩可以,练技巧活思路而已,终究不是正道

TOP

接着玩
  1. @echo off
  2. set ip=192.168.1.1
  3. for %%a in (%ip%) do for %%b in (%%~na) do echo %%~na
  4. pause
复制代码

TOP

回复 21# neorobin


思路巧妙!之前也想过位运算,但以为无法兼容第一节大于 127 的 ip,忘了位运算是不分正负数的
不过有点绕了,还可以再直接点:
  1. set a=192.168.1.1
  2. set /a "a=%ip:.=,b=c,c=d,d=%"
  3. echo %a%.%b%
  4. pause
复制代码
2

评分人数

TOP

回复 24# terse


赞~
试过这种办法,但没想到提示“运算符不存在。”的时候其实已经赋值了,学习了!

TOP

返回列表