代码之家  ›  专栏  ›  技术社区  ›  Tak

删除特殊字符和任何其他字符批处理文件之间的空格

  •  0
  • Tak  · 技术社区  · 7 年前

    我有一个批处理文件,它从文本文件的第4行获取人名(firstname lastname),然后用下面的脚本创建一个文件夹,将这个名字连接到“-id”。

    问题是名称存储在一个文件中,在姓氏后面有很多空格,所以当我创建一个文件夹时,文件夹被命名为 "Firstname Lastname -ID" 例如。

    关于如何删除姓氏和“-”字符之间的空格以便命名文件夹的任何建议 "Firstname Lastname-ID" 是吗?

    SET id=abc111
    set "xprvar="
    for /F "skip=3 delims=" %%i in ('type "C:\My folder\name.txt"') do if not defined xprvar set "xprvar=%%i"
    set foldername=%xprvar%"-"%id%
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Compo    7 年前

    你可以用 Call %* 元变量,它将忽略任何尾随空格。

    例子:

    @Echo Off
    Set "id=abc111"
    For /F "Skip=3 Tokens=* UseBackQ" %%A In ("C:\My folder\name.txt") Do Call :Sub %%A & GoTo :Break
    GoTo :EOF
    :Break
    Rem Your commands here
    MD "%foldername%" 2>Nul
    Pause
    GoTo :EOF
    
    :Sub
    Set "foldername=%*-%id%"
    GoTo :EOF
    

    您还将注意到,它与诸如 Jean-Claude Van Damme

    编辑
    以下修改应考虑到文本文件不是使用Windows CRLF行结尾的标准ASCII文本文件的可能性。

    @Echo Off
    Set "id=abc111"
    For /F "Skip=3 Tokens=*" %%A In ('Type "C:\My folder\name.txt"') Do Call :Sub %%A & GoTo :Break
    GoTo :EOF
    :Break
    Rem Your commands here
    MD "%foldername%" 2>Nul
    Pause
    GoTo :EOF
    
    :Sub
    Set "foldername=%*-%id%"
    GoTo :EOF
    
        2
  •  0
  •   Magoo    7 年前

    如果你发布了样本数据,测试会更容易些

    for /F "tokens=1,2skip=3 delims= " %%i in ('type "C:\My folder\name.txt"') do if not defined xprvar set "xprvar=%%i %%j"
    

    但是,“让-克劳德-凡-达米”这样的名字怎么办?