【发布时间】:2016-11-24 10:41:29
【问题描述】:
我最近一直在使用批处理来完成我的工作,并且在这里和那里使用少量的 power shell 来产生很好的效果。
总是让我感到困惑的一件事是在循环等工作时的标记和定界概念。我看过你管视频并阅读它上面的经典 rob van 页面。我有点明白,但是当我需要使用它时,它不是基本的。
我有一个例子,如果有人能很好地解释你如何选择令牌和分隔符的数量,那将非常有帮助。我需要从网页的各个列中推断出 PC 主机名。我可以将文本复制到文本板中,并希望仅将计算机名称“回显”到另一个文件中。
24 Nov 2016 09:45 GMT 194.176.105.132 United Kingdom ID006962.CENTRAL 3.10.6.0 Remove
24 Nov 2016 09:44 GMT 194.176.105.154 United Kingdom ID006976.CENTRAL 3.10.5.0 Remove
24 Nov 2016 09:43 GMT 194.176.105.146 United Kingdom ID007634.CENTRAL 3.10.6.0 Remove
24 Nov 2016 09:41 GMT 194.176.105.138 United Kingdom ID006961.CENTRAL 3.10.6.0 Remove
24 Nov 2016 09:28 GMT 194.176.105.132 United Kingdom ID007643.CENTRAL 3.10.5.0 Remove
计算机名称是 ID0006962 数字,但我不需要尾随的 .CENTRAL。从这个文本中,我只需要另一个带有主机名的文本文件。我可以做所有这部分,它只是外推数据元素。有时列表很大,最好保存到一个文本文件中,对它运行一个 for 循环并吐出另一个只有主机名的文本文件。我想如果我能更深入地了解这一点,我也可以将这些知识应用到我需要做的其他事情上。非常感谢任何提示!
另一个文本文件中的示例输出(我想要):-
ID006967
ID007566
ID007567
ID006976
ID007643
编辑我怎样才能在主机名旁边获得 3.10.6.0 等
ID006967 3.10.6.0
ID007566 3.10.6.0
ID007567 3.10.6.0
ID006976 3.10.6.0
ID007643 3.10.6.0
我已经尝试过了,但迷路了,这就是我的想法......
@echo off
> "%~dp0test.txt" (
for /F "usebackq tokens=4,5 delims= " %%J in ("%~dp0rob.txt") do @(
for /F "tokens=1,3,4,5,6 delims=." %%I in ("%%J") do @echo(%%I
)
)
所以我的想法 (LOL)...我希望将 4,5 个标记(第 4 列和第 5 列)提取到 %%J 我希望下一个循环回显附加标记以及主机名,所以仍然使用 ' 。作为此测试中第 4 行和第 5 行的分隔符,我相信现在有 6 个令牌可供选择....但输出仍然只显示主机名...我没有得到什么
ID006962(t1).CENTRAL(t2) 3(t3).10(t4).6(t5).0(t6)
【问题讨论】:
-
"Delims= ."多个分隔符被视为一个。数一下有多少.和` `(我认为是12 个)分隔标记。所以第 12 个字母是 L。所以For /f "delims=12 tokens= ." in %%A Do (something) Echo %%A或For /f "tokens= ." in %%A (something) Do %%L -
到目前为止你尝试过什么?请分享!我看到两个选项:1.
for /F "usebackq tokens=12 delims=. " %%I in ("yourfile.txt") do echo(%%I(delims中的 space 必须是整个选项字符串中的最后一个字符),或 2.for /F "usebackq delims=" %%L in ("yourfile.txt") do set "LINE=%%L" & echo(!LINE:~56,8!(启用delayed expansion ); -
@Noodles,您似乎混淆了选项字符串中的
tokens和delims关键字;要在delims中包含一个空格,您需要将其声明为整个选项字符串的最后一个字符... -
请不要更改您的问题的要求,尤其是之前已经回答过的问题!考虑到答案可能看起来不完整,甚至是错误的。解决新问题:取my answer,将
tokens=4替换为tokens=4,5,然后将@echo(%%I替换为@echo(%%I %%K...
标签: loops batch-file cmd token