标题: [文件操作] 批处理命令for /f 集里的("abcdefg"),如何分成7段? [打印本页]
作者: smatenchen 时间: 2022-6-1 00:48 标题: 批处理命令for /f 集里的("abcdefg"),如何分成7段?
本帖最后由 smatenchen 于 2022-6-2 21:04 编辑
for /f 集里的("abcdefg"),如何分成a,b,c,d,e,f,g,这样的7段?
1
for /f “delims=?”%%i in ("abcdefg") do echo %%i
如何将"abcdefg"分成7段,再显示成“a b c d e f g”,或"a-b-c-d-e-f-g",或"a,b,c,d,e,f,g"呢?
2
用什么分隔符呢?命令语句怎么写呢?
作者: qixiaobin0715 时间: 2022-6-1 08:38
字符连在一起,你说哪里有分隔符呢?应用你所说的for /f加delims无法分隔,可以考虑其它方式:- @echo off
- set var1=abcdefg
- :a
- set var2=%var1:~0,1%
- set var1=%var1:~1%
- echo,%var2%
- if not "%var1%"=="" goto :a
- pause
复制代码
作者: smatenchen 时间: 2022-6-2 21:07
回复 2# qixiaobin0715
1
感谢大神!
2
你的代码,有效。
3
鄙人的意思是,要显示成“a b c d e f g”,或"a-b-c-d-e-f-g",或"a,b,c,d,e,f,g",
而非单显。
4
大神,有解法吗?
作者: qixiaobin0715 时间: 2022-6-6 14:00
回复 3# smatenchen - @echo off
- set var1=abcdefg
- :a
- set var2=%var1:~0,1%
- set var1=%var1:~1%
- set var=%var%,%var2%
- if not "%var1%"=="" goto :a
- set var=%var:~1%
- echo,%var%
- pause
复制代码
作者: smatenchen 时间: 2022-6-8 17:45
回复 4# qixiaobin0715
1
感谢大神!
2
大神的代码,有效。感谢!
3
这样传递变量,蛮有趣的。
4
代码的世界,人类的思维不好懂。
5
二进制思维,如何跃升为人类思维,自然语言?
6
人类的思维,是如何运作的?怎么完成逻辑运算?
作者: idwma 时间: 2022-6-8 21:09
回复 5# smatenchen
5给道友推荐一本书 '龙书'
作者: smatenchen 时间: 2022-6-8 22:35
回复 6# idwma
作者: hfxiang 时间: 2022-7-18 11:52
@echo off
setlocal EnableDelayedExpansion
set "var1=abcdefg"
set "var2="
for /l %%i in (0,1,6) do call set "var2=!var2!-%%var1:~%%i,1%%"
echo;%var2:~1%
endlocal
作者: smatenchen 时间: 2022-7-19 20:29
本帖最后由 smatenchen 于 2022-7-19 20:34 编辑
回复 8# hfxiang
@echo off
setlocal EnableDelayedExpansion
set "var1=abcdefg"
set "var2="
for /l %%i in (0,1,6) do call set "var2=!var2!-%%var1:~%%i,1%%"
echo;%var2:~1%
endlocal
1,
感谢大神!
2,
其中,do call set,是什么用法?
3,
call不是用来调用其它批处理的吗?
怎么还可以有这样的用法吗?
具体含义,请大神细解一下。
4,
省掉call,写成do set,不行吗?
5,
%var1:~%%i,1%,这句含义明确,再在其外套一层%%,是何意呢?
6,
因为,其内有%%i,故也要仿照使用%吗?。
作者: hfxiang 时间: 2022-7-20 08:54
第2、第3及第5其实是同1个问题:do call set 主要为解决for内字符串截取时“~”后跟变量的问题;
第4个问题:省掉 call,写成 do set,行不行你可自行测试(代码已是现成,其实测试才是最好的老师);
第6个问题:你说对了。
作者: smatenchen 时间: 2022-7-20 20:22
回复 10# hfxiang
1,
感谢大神!
2,
查看call的帮助,没有这类用法的讲解。
3,
for的帮助,也没细讲,如何用转义,用变量……。
4,
这样,学起来就费劲了!
得从其它地方去一点点积累了。
5,
微软,甚不是个玩艺哎!
作者: ZDG0000 时间: 2022-7-22 01:32
沙雕年年有!!!
作者: smatenchen 时间: 2022-7-22 16:39
回复 12# ZDG0000
作者: CrLf 时间: 2022-7-24 00:00
- @echo off & setlocal enabledelayedexpansion
- cmd /u /c "echo abcdefg" | for /f "delims=" %%a in ('more') do (
- for %%b in (%%a) do echo %%b
- )
复制代码
作者: hfxiang 时间: 2022-7-24 09:21
回复 14# CrLf
太厉害了!!!但不知其所以然。
同时俺在Win10命令行下,如下单条指令也能出同样的结果,太神奇了
cmd /u /c "echo abcdefg"|for /f "delims=" %a in ('more') do @echo %a
作者: CrLf 时间: 2022-7-26 23:01
回复 15# hfxiang
原理是 cmd /u 会将内容按unicode编码输出,其中原本的单字节字符后会额外加一个 00(NUL字符),而more会将 00 变成 0D 0A(回车换行符)
确实只要一层for就可以了,写的时候记成more会把NUL替换成空格,所以多写了一层
作者: smatenchen 时间: 2022-8-20 08:26
回复 16# CrLf
作者: Batcher 时间: 2023-7-24 18:56
回复 14# CrLf - @echo off
- for /f "delims=" %%i in ('cmd /q /u /c set /p "=abcdefg" ^< nul ^| find /v ""') do (
- echo,%%i
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |