我有一个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: =_%"
答案 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)
您的文件似乎是另一个命令(可能是powershell一个命令)中的内容。
在事实发生后尝试修复输出似乎效率低下。因此,我的建议是更改该命令,以使输出的格式不是固定宽度的空格。
也许,使用以下命令修改命令:
... | Select-Object -ExpandProperty DisplayName | Out-File -FilePath 'C:\My-User\name.txt'
将对此有所帮助。