Batch file 文件中的循环字符

Batch file 文件中的循环字符,batch-file,replace,Batch File,Replace,我有一个程序,可以创建一个像这样的文件 2020/05/04 19:11:43 10113 35.11154 6.69945 2.081 254 2020/05/04 19:12:04 10113 35.11159 6.69926 1.294 294 2020/05/04 19:12:10 10100 35.08132 6.67381 1.997 346 是否可以通过批量消除每行的一部分以获得此结果 2020/05/04 19:

我有一个程序,可以创建一个像这样的文件

2020/05/04 19:11:43      10113  35.11154    6.69945   2.081 254
2020/05/04 19:12:04      10113  35.11159    6.69926   1.294 294
2020/05/04 19:12:10      10100  35.08132    6.67381   1.997 346
是否可以通过批量消除每行的一部分以获得此结果

2020/05/04 19:11:43      10113  35.11154
2020/05/04 19:12:04      10113  35.11159
2020/05/04 19:12:10      10100  35.08132

您的文件有7个令牌,但您只需要前4个令牌
for/f
使用选项
tokens=1-4
循环将获得前4个令牌。

此方法在给定令牌之前保留相同的数据,包括行中相同的现有空格

@echo off
setlocal EnableDelayedExpansion

(for /F "delims=*" %%a in (input.txt) do (
   call :PreserveUpToToken#4 %%a
)) > output.txt
goto :EOF

:PreserveUpToToken#4
set "line=%*"
set "line=!line:%4=%4& rem!"
echo %line%
exit /B

答案是:是的。请阅读…此方法需要计算输入数据中的空格,并在程序中对其进行硬编码。如果第4列中的值也出现在前面的一列中,则此方法无效,即使是作为子字符串。很明显,样本数据没有问题,但在一般意义上,这肯定是一个问题。如果第4列包含
=
,也会出现问题。。
@echo off
setlocal EnableDelayedExpansion

(for /F "delims=*" %%a in (input.txt) do (
   call :PreserveUpToToken#4 %%a
)) > output.txt
goto :EOF

:PreserveUpToToken#4
set "line=%*"
set "line=!line:%4=%4& rem!"
echo %line%
exit /B