从bat文件中删除行文本文件中的剩余空格

时间:2019-11-27 14:49:16

标签: batch-file

我有一个bat文件,它从文本文件读取输入。文本文件如下所示:

Displayname                                                                    
-----------                                                                    
John Travolta                    

我想读的名字在第四行(开头有一个空行)

问题是姓氏后面有很多空格,我想在末尾消除这些空格,以便文件夹名将为John_Travolta-123,其中末尾的空格由下划线代替,但现在由于末尾有空格,因此文件夹名称显示为John_Travolta__________________________________-123。下面是我的脚本:

SET id="123"
set "xprvar="
for /F "skip=3 delims=" %%i in ('type "C:\My_User\name.txt"') do if not defined xprvar set "xprvar=%%i"
set foldername=%xprvar%"-"%id%
Set "foldername=%foldername: =_%" 

2 个答案:

答案 0 :(得分:2)

只要您的第四行满足以下所有条件,就可以使用~nx FOR变量修饰符删除尾随空格:

  • 它不包含任何*?\/
  • 第二个字符不是:
  • 最后一个字符不是.

之所以可行,是因为Windows不允许文件或文件夹名称以空格或.

结尾
set id="123"
set "foldername="
for /F "usebackq skip=3 delims=" %%i in ("C:\My_User\name.txt") do if not defined foldername set "foldername=%%~nxi-%id%"
set "foldername=%foldername: =_%"

如果您具有混合批处理/ JScript正则表达式实用程序JREPL.BAT,则该解决方案非常紧凑,没有任何限制:

call jrepl " +$| |$" "|_|-123" /T "|" /F "C:\My_User\name.txt" /RTN foldername:4

JREPL命令使用/T选项使用|作为定界符来设置3个查找/替换对。第一对将所有尾随空格替换为空。第二个空格用下划线替换其他空格,最后一个空格将您的ID放在末尾。

/F选项指定输入文件

/RTN选项指定仅接收第四行的输出变量名称。

答案 1 :(得分:1)

您的文件似乎是另一个命令(可能是一个命令)中的内容。

在事实发生后尝试修复输出似乎效率低下。因此,我的建议是更改该命令,以使输出的格式不是固定宽度的空格。

也许,使用以下命令修改命令:

... | Select-Object -ExpandProperty DisplayName | Out-File -FilePath 'C:\My-User\name.txt'

将对此有所帮助。