File 是否编辑平面文件以使每行具有特定数量的字符?

File 是否编辑平面文件以使每行具有特定数量的字符?,file,batch-file,add,spaces,flat,File,Batch File,Add,Spaces,Flat,我想创建一个批处理文件,将平面文件中的每一行转换为特定数量的字符,并在每一行的末尾添加空格 例如: 我有一个名为text.txt的文本文件,它如下所示: 1 22 333 4444 55555 Foreach ($strLine in Get-Content c:\temp\text.txt) { $strTemp = $strLine + "........" If ($strTemp.Length -lt 1) { Add-Content c:\temp\output.txt

我想创建一个批处理文件,将平面文件中的每一行转换为特定数量的字符,并在每一行的末尾添加空格

例如: 我有一个名为text.txt的文本文件,它如下所示:

1
22
333
4444
55555
Foreach ($strLine in Get-Content c:\temp\text.txt) 
{ 
 $strTemp = $strLine + "........"
 If ($strTemp.Length -lt 1) {
  Add-Content c:\temp\output.txt $strTemp
 } Else {
  Add-Content c:\temp\output.txt $strTemp.SubString(0,7)
 }
}
[number]text
[number]text
[number]
[number]
…
我想在其上运行一个批处理文件,并接收以下所有行的长度均为7个字符:

1......
22.....
333....
4444...
55555..
我不得不用点来替换我的空格,使其可见

这有可能吗?怎么可能

更新: 很酷,很好用

是否也可以将空白行仅CRLF转换为7个空格?当我在一个有空行的文件上运行上述命令时,它们将被删除

谢谢

编辑:为了澄清,这是一个文件:

1
22

333
22

1
4444
55555
我想接受:

1......
22.....
.......
333....
22.....
.......
1......
4444...
55555..
再次感谢

更新2: 安德烈的回答让我前进了几步。不过我有一些问题。如果我不签出,输出将如下所示,仍然是句点而不是空格:

1.......
22......
ECHO is off.
333.....
22......
ECHO is off.
1.......
4444....
55555...
如果一行以空格开头,它将被输出为:

ECHO is off.
不幸的是,Powershell不是一个选项

这可能是一个更好的例子, text.txt:

This is
 the input
file 
     I

 want to convert

当然,现在我们必须使记录更长,比如说20个字符。

有一种方法,我在集合strTemp=%1中的空格末尾留了一个句点。对于可见性,可以将其删除:

@ECHO OFF

FOR /F %%a IN (text.txt) DO Call :FixString %%a
PAUSE
EXIT

:FixString
 SET strTemp=%1       .
 ECHO.%strTemp:~0,7% >> output.txt
 EXIT /b
/编辑:

Powershell是您的选择吗?在那里更容易处理回车,如下所示:

1
22
333
4444
55555
Foreach ($strLine in Get-Content c:\temp\text.txt) 
{ 
 $strTemp = $strLine + "........"
 If ($strTemp.Length -lt 1) {
  Add-Content c:\temp\output.txt $strTemp
 } Else {
  Add-Content c:\temp\output.txt $strTemp.SubString(0,7)
 }
}
[number]text
[number]text
[number]
[number]
…
如果每行中都有空格,此Powershell脚本也会正常工作。我之前给您的.cmd脚本将出现问题。您需要更改For命令的delims=参数来处理这些空格。

For循环不会忽略空行。这是故意的。要解决此问题,可以使用以下命令:

FIND /N /V "" < sourcefile
因此,空行将如下所示:

1
22
333
4444
55555
Foreach ($strLine in Get-Content c:\temp\text.txt) 
{ 
 $strTemp = $strLine + "........"
 If ($strTemp.Length -lt 1) {
  Add-Content c:\temp\output.txt $strTemp
 } Else {
  Add-Content c:\temp\output.txt $strTemp.SubString(0,7)
 }
}
[number]text
[number]text
[number]
[number]
…
现在我们可以迭代所有的行了。我们只需要删除所有的[number]部分,然后使用@Dave的想法添加空格并删除前7个字符。以下是完整的脚本:

@ECHO OFF
FOR /F "delims=" %%L IN ('FIND /N /V "" ^<text.txt') DO CALL :process "%%L"
GOTO :EOF

:process
SET "line=%~1"
SET "line=%line:*]=%       "
ECHO(%line:~0,7%#
添加字符仅用于视觉指示

更新

在ECHO之后添加。这就解决了回声关闭的问题。基本上,您可以使用许多不同的字符,而不是,例如,或。但是,如中所示,这似乎是最可靠的

更新2


将delims=选项添加到/F之后的FOR循环中,以说明文本中的空格。

安德烈的回音代码可以更改为回音%line:~0,7%,而不是空行。汉克,我很想使用powershell脚本,但我相信这不是一个选项。@Martin:我的错,应该记得从一开始就考虑到这个问题。请查看更新的答案。谢谢。现在效果好多了。但还是忽略了第一个空格后的所有内容。11 1变成11@Martin:我最近对细节越来越不在意了,真的很抱歉。现在请看一下解决方案。谢谢!不要担心细节。更新提供了我所需要的。顺便问一下,为什么当我说ECHO%line:~0,7%时,这行变成了8个字符?@Martin:不知道。当我测试它时,它总是7个字符。甚至无法想象为什么会有8个。除非你忘了搬走,但我肯定你没有。奇怪…:\