如果我有 35 个字符需要分配令牌,我将需要使用小写和大写。如果我已经使用了所有小写 ASCII 字符,如何处理大写 ASCII 字符?我用小写字母得到了 26,但是当我添加三个大写 ASCII 时,它输出 A|B|C|...让我解释一下。
这是代码:
@ECHO OFF
SETLOCAL
SET "sourcedir=C:UsersaborgettiDesktopPipe Delimiter Project"
SET "destdir=C:UsersaborgettiDesktopPipe Delimiter Project"
(
FOR /f "tokens=1-29delims=|" %%a IN ('TYPE "%sourcedir%test.txt"') DO (
ECHO(^|%%a^|%%b^|%%c^|%%d^|%%e^|%%f^|%%g^|%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v^|%%w^|%%x^|%%y^|%%z^|%%A^|%%B^|%%C^|
)
)>"%destdir%newfile.txt"
最后三个 %%A^|%%B^|%%C^| 不会转换为我分配给它们的项目。有人知道为什么吗?我能做些什么来获得超过 26 个代币?
更新
这是我所在的地方,我知道我有一些语法,但我认为总的来说它就在那里。 有什么帮助吗?
@ECHO OFF
SETLOCAL
SET "sourcedir=C:UsersaborgettiDesktopPipe Delimiter Project"
SET "destdir=C:UsersaborgettiDesktopPipe Delimiter Project"
SET str="1|2|#|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35"
(
FOR /f "tokens=1-25* delims=|" %%a IN ('TYPE "%sourcedir%test.txt"') DO (
FOR /F "TOKENS=1-10 DELIMS=|" %%a in ("%%z") do (
ECHO(^|%%a^|%%b^|%%c^|%%d^|%%e^|%%f^|%%g^|%%h^|%%i^|%%j^|%%k^|%%l^|%%m^|%%n^|%%o^|%%p^|%%q^|%%r^|%%s^|%%t^|%%u^|%%v^|%%w^|%%x^|%%y^|%%z^|%%A^|%%B^|%%C^|
)
))>"%destdir%newfile.txt"
先做两个阶段 - 25 个代币 + 余数,然后在第二个循环中拆分余数for
:
@echo off
setlocal
set str="1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35"
for /f "tokens=1-25* delims=|" %%a in (%str%) do (
for /f "tokens=1-10 delims=|" %%A in ("%%z") do echo %%a -- %%y -- %%A -- %%J
)
您可以更改拆分值的方式。您可以使用常规for
命令来迭代值并使用它们来组装输出行,而不是使用 for /F "tokens=...
命令。但是,这仅在值具有特定形式时才有效。在下面的示例中,我假设这些值没有引号、感叹号、插入符号或通配符(?
或*
);这些点可能是固定的,但有更多的代码......
编辑:我修改了代码以获得有限数量的字段。
@echo off
setlocal EnableDelayedExpansion
REM set "sourcedir=C:UsersaborgettiDesktopPipe Delimiter Project"
REM set "destdir=C:UsersaborgettiDesktopPipe Delimiter Project"
set "max=%1"
if not defined max set max=99
for /F "usebackq delims=" %%a in ("test.txt") do (
set "input=%%a"
set "output=|"
set i=0
for %%b in ("!input:|=" "!") do if !i! lss %max% (
set "output=!output!%%~b|"
set /A i+=1
)
echo !output!
)
这是测试.txt:
1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i
35|34|33|32|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1
输出示例:
C:> test
|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|
|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i|
|35|34|33|32|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|9|8|7|6|5|4|3|2|1|
C:> test 26
|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|
|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|
|35|34|33|32|31|30|29|28|27|26|25|24|23|22|21|20|19|18|17|16|15|14|13|12|11|10|
C:> test 7
|1|2|3|4|5|6|7|
|A|B|C|D|E|F|G|
|35|34|33|32|31|30|29|
for /F
命令中的最大标记数为 31。如果令牌数大于 31,则不处理任何内容:
@echo off
for /F "tokens=1-31" %%A in ("A B C D E F G H I J K L M N O P Q R S T U V W X Y Z A0 A1 A2 A3 A4 A5 A6 A7 A8 A9") do (
echo %%A %%B %%C %%D %%E %%F %%G %%H %%I %%J %%K %%L %%M %%N %%O %%P %%Q %%R %%S %%T %%U %%V %%W %%X %%Y %%Z %%[ %% %%] %%^^ %%_ %%` %%a %%b %%c
)