编辑平面文件,使每行具有特定数量的字符



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

的例子:我有一个名为"text.txt"的文本文件,它看起来像这样:

1
22
333
4444
55555

我想在它上运行一个批处理文件并接收以下内容(所有行都是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个字符。

这里有一种方法(我在"SET 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是一个选项吗?在这里处理回车会更容易,像这样:

Foreach ($strLine in Get-Content c:temptext.txt) 
{ 
 $strTemp = $strLine + "........"
 If ($strTemp.Length -lt 1) {
  Add-Content c:tempoutput.txt $strTemp
 } Else {
  Add-Content c:tempoutput.txt $strTemp.SubString(0,7)
 }
}

如果每行都有空格,这个Powershell脚本也会表现得很好,我之前给你的。cmd脚本会有问题(你需要改变For命令的delims=参数来处理它们)。

FOR循环不省略空行。这是设计好的。要解决这个问题,您可以使用以下命令:

FIND /N /V "" < sourcefile

认为没有行可以匹配""(空字符串),因此简单地FIND "" < file将产生空输出。但是/V选项会导致输出的反转:FIND不是匹配搜索字符串的行,而是输出那些不匹配的行。因此,FIND /V "" < file本质上导致FIND输出file的所有行。/N使每行都加上行号,如下所示:

[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之后增加(。这解决了ECHO is off的问题。基本上,您可以使用许多不同的字符来代替(,例如.,。但是,从这个答案中可以看出,(似乎是最可靠的。

更新2

/F之后的FOR循环中添加"delims="选项,以解释文本中的空格

相关内容

  • 没有找到相关文章

最新更新