代码之家  ›  专栏  ›  技术社区  ›  Rookie Programmer Aravind

如何使用批处理脚本从文件中删除第一个和最后一个字符?

  •  2
  • Rookie Programmer Aravind  · 技术社区  · 14 年前

    这是我用来复制到输出文件的输入文件内容。

    #sdfs|dfasf|sdfs|
    sdfs|df!@$%%*&!sdffs|
    sasdfasfa|dfsdf|#sdfs|
    

    我需要做的是省略输出文件中的第一个字符“”和最后一个字符“”。 所以输出将是,

    sdfs|dfasf|sdfs|
    sdfs|df!@$%%*&!sdffs|
    sasdfasfa|dfsdf|#sdfs
    

    批处理脚本对我来说是新的,但我尽了最大努力尝试了这些代码,

    :: drop first and last char
    
    @echo off > xyz.txt & setLocal EnableDelayedExpansion
    
    for /f "tokens=* delims=" %%a in (E:\abc1.txt) do (
    set str=%%a
    set str=!str:~1!
    echo !str!>> xyz.txt
    )
    

    如您所见,它不能产生所需的输出。

    现在正在生产的产品

    sdfs|dfasf|sdfs|
    dfs|dfsdffs|
    asdfasfa|dfsdf|#sdfs|
    

    我不知道绳子为什么 !@$%%*&! 也会被撕破!?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Victor    14 年前

    下一个脚本,调用文件 远.vbs ,然后创建新文件。

    代码:

    set OldFile=E:\abc1.txt
    set NewFile=E:\xyz.txt
    echo. > "%NewFile%"
    start far.vbs "%NewFile%" "%OldFile%"
    


    VBS 删除文件中的第一个和最后一个字符。
    创建新文件 远.vbs 在第一个脚本所在的文件夹中,粘贴以下代码:

    Set OldFile = CreateObject("Scripting.FileSystemObject")
    Set rdOldFile = OldFile.OpenTextFile(Wscript.Arguments(1), 1)
    oContent = rdOldFile.ReadAll
    rdOldFile.Close
    
    Set lOldFile = CreateObject("Scripting.FileSystemObject")
    Set lrdOldFile = OldFile.OpenTextFile(Wscript.Arguments(1), 1)
    oLen = len(lrdOldFile.ReadAll)
    lrdOldFile.Close
    
    oData = oContent
    oData = Right(oContent, oLen-1)
    oData = Left(oData, oLen-2)
    
    Set NewFile = CreateObject("Scripting.FileSystemObject")
    Set fData = NewFile.OpenTextFile(Wscript.Arguments(0), 2)
    fData.WriteLine (oData)
    fData.Close
    
        2
  •  2
  •   ghostdog74    14 年前

    批处理从来不是文件处理和文本操作的强项。如果你有奢侈品,你可以下载 sed 从gnu win32,然后使用这个一行程序。

    C:\test>sed  "/#/{s/^#//;s/|$//}" file
    sdfs|dfasf|sdfs
    sdfs|df!@$%%*&!sdffs|
    sasdfasfa|dfsdf|#sdfs
    
        3
  •  2
  •   lugte098    14 年前

    我现在无法调试代码,但请尝试:

    :: drop first and last char
    
    @echo off > xyz.txt
    @echo off > xyz2.txt
    @echo off > xyz3.txt
    
    setLocal EnableDelayedExpansion
    
    for /f "tokens=* delims= " %%a in (E:\abc1.txt) do (
    set /a N+=1
    echo %%a >> xyz.txt
    echo %%b >> xyz2.txt
    echo %%%c >> xyz3.txt