有没有办法从文本文件中删除空格? (或首先阻止它)

时间:2019-08-18 00:34:01

标签: batch-file

旁注-不是最好的编码器

我正在制作批处理文件脚本,需要从runfig.conf读取

我尝试使用SETLOCAL EnableDelayedExpansion,但这似乎无法解决。其他谷歌搜索没有结果

这会将变量保存到文件中

echo %fname% > runfig.conf && echo Saving "%fname%" to file...
echo %name% >> runfig.conf && echo Saving "%name%" to file...
echo %mem% >> runfig.conf && echo Saving "%mem%" to file...

这将读取文件:

< runfig.conf (
  set /p fname=
  set /p name=
  set /p mem=
)

不幸的是,不是这样的:

database
server
4

它另存为:

database  
server  
4  

注意最后两个空格吗?那些弄乱了我的程序。因此,为了重申我的问题,我该如何删除/预防这些问题?

3 个答案:

答案 0 :(得分:2)

类似于@SomethingDark的当前答案,这将写入配置文件,同时还将通知消息重定向到控制台:

@Echo Off
(   Echo=%fname%&&Echo Saving %fname% to file...>CON
    Echo=%name%&&Echo Saving %name% to file...>CON
    Echo=%fname%&&Echo Saving %mem% to file...>CON)>"runfig.conf"


如您所见,除了使用STDOUT代替STDIN之外,write方法与read方法相同:

(   Set /P "fname="
    Set /P "name="
    Set /P "mem=")<"runfig.conf"


还请记住,如果变量是通过Set /P从用户输入中传播的,则最终用户什么也不能输入,因此,在将响应写入配置文件之前,应先验证响应是否满足您的要求:

Rem Undefining any existing variable named fname.
Set "fname="
Rem Requesting first name input from user.
Set /P "fname=What is your first name? "
Rem Below here you should be verifying the input meets your requirements.

答案 1 :(得分:1)

发生这种情况是由于您在%fname%>之间放置了空格。有几种方法可以解决此问题。

第一种方法是简单地删除空格:

echo %fname%>runfig.conf && echo Saving "%fname%" to file...
echo %name%>>runfig.conf && echo Saving "%name%" to file...
echo %mem%>>runfig.conf && echo Saving "%mem%" to file...

但是,如果三个变量中的任何一个都以数字结尾,则会产生意外的结果,因此这可能不是您的最佳选择。

您还可以将重定向语句移至行首,再次删除变量后的所有空格:

>runfig.conf echo %fname%&& echo Saving "%fname%" to file...
>>runfig.conf echo %name%&& echo Saving "%name%" to file...
>>runfig.conf echo %mem%&& echo Saving "%mem%" to file...

如果您不需要显示状态(并且您也不需要,因为重定向不会在脚本的中间异常失败),则可以将所有内容放在单个代码块中:

(
    echo %fname%
    echo %name%
    echo %mem%
)>runfig.conf
echo Values added to file.

答案 2 :(得分:-4)

没关系,我在google的第三页上找到了答案。 对于那些想知道的人,请运行set a=%a: =%,其中a是您的变量。 谢谢,还是!