我试图通过分隔符":"来划分文件,但它似乎将它除以行。
这是我的代码:
FOR /f "tokens=* delims=:" %%x in (SomeFile.txt) DO echo %%x
这是" SomeFile.txt":
1:2:3:4:5:6:7
8:9:10:11:12:13:14个
......
我希望它是:
1
2
3
4
5
...
但我得到的文件原样:
1:2:3:4:5:6:7
8:9:10:11:12:13:14个
...
对此有何解释?
答案 0 :(得分:1)
For /f
从文件中读取行,并根据分隔符集和tokens
设置对其进行标记。
由于您使用tokens=*
,所有令牌都会分配给元变量 %%x
。
如果您发布实际数据会更好,因为解决方案可能会受到实际数据格式的影响,但为了产生结果,另一种方法是:
@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q44868366.txt"
for /f "delims=" %%a in (%filename1%) do CALL :uncolon "%%a"
)
GOTO :EOF
:uncolon
SET "line=%~1"
FOR %%t IN ("%line::=" "%") DO ECHO %%~t
goto :eof
(我将变量filename1
设置为包含您的测试数据的文件)
此处,每行依次分配给%%a
,然后由子程序:uncolon
处理
子例程接受line
的第一个参数,并删除带有~
修饰符的封闭引号。
变量line
然后将每个冒号替换为" "
,并将结果字符串本身括在双引号中。结果是一系列带引号的字符串,然后简单的for
进行处理,依次为%%t
分配,echo
为每个字符串生成一行,并用{再次删除封闭的引号{1}}。
......但很大程度上取决于所涉及的实际数据。