簡體   English   中英

跳過標題行並在批處理腳本中替換文本文件中的字符串

[英]skip header line and replace string in text file in batch script

@echo off     
setlocal enableextensions disabledelayedexpansion    
for /r %f in (xis_a*) do  More +1 %~nxf >> No_header_%~nxf    
set "search=:20:"

    set "replace={:20:"
    for /f "delims=" %%i in ('type (No_header_*.txt) ^& break ^> (No_header_*.txt) ') do (
        set "line=%%i"
        setlocal enabledelayedexpansion
        set "line=!line:%search%=%replace%!"
        >>No_header_*.txt echo(!line!
        endlocal
    )

正在嘗試跳過文本文件中的標題行,並用{:20:替換:20:。 我已經寫過並且幾乎取得了成就..請嘗試幫助我這個新手

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
set "search=:20:"
set "replace={:20:"

for /r "%sourcedir%" %%f in (xis_a*) do (
 REM DEL "%destdir%\No_header_%%~nf.txt" >NUL 2>nul
 for /f "usebackqskip=1delims=" %%i in ("%%f") do (
  set "line=%%i"
  setlocal enabledelayedexpansion
  set "line=!line:%search%=%replace%!"
  >>"%destdir%\No_header_%%~nf.txt" echo(!line!
  ENDLOCAL
 )
)

GOTO :EOF

這應該可以解決問題。

在您的代碼中,初始setlocal建立了默認條件,因此我省略了它。

你必須%f在你的'for /r -的%的metavariable前f需要加倍。

不需要more儀式- for /f有一個skip選項,將允許skip前n行。

因此-所需要做的就是獲取由for...%%f...循環生成的文件列表,並與每個文件一起處理每個文件,跳過第一行。 引用出現在%%f的文件名只是一種安全措施,允許包含分隔符的文件名,但這意味着需要調用usebackq來告訴for /f給出的列表不是文字字符串(它將假定為(帶引號的字符串)),但文件名。

然后,由於%%f%%i循環的上下文,因此可以使用%%~nf選擇目標文件名。 我不知道你是否希望~nf~nxf (添加第二個.txt擴展名),所以我選擇使用~n孤獨。 請注意,您對*的使用注定會失敗-這意味着“所有文件都匹配”-可能與您想要的不完全相同, cmd會變得非常混亂。

我已經添加了一個remmed-out del命令,以允許刪除目標文件-如果需要,只需刪除rem ,否則數據將被附加到任何現有文件中。

我使用u:驅動器進行測試,並保留了源名稱和目標名稱。 毫無疑問,您將需要更改它們以適合您的系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM