2017-05-05 31 views
1

我有以下內容的文件的特定行數的新線,的Windows上添加文件

. 
. 
. 
:job details 
:emp details 
:non tech emp details  #line number 75 
:assist details    #line number 76 
. 
. 
. 

正嘗試上線人數76添加新條目,並期望輸出低於,

. 
. 
. 
:job details 
:emp details 
:non tech emp details  #line number 75 
:tech emp details   #line number 76 
:assist details    #line number 77 
. 
. 
. 

下面是批處理腳本方法正在嘗試,

@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set "seventysixthLine=:tech emp details" 
    (for /f "delims=" %%a in (C:\Users\username\Documents\emp_details.txt) do (
     echo(%%a 
     if defined seventysixthLine ( 
      echo(%seventysixthLine% 
      set "seventysixthLine=" 
     ) 
    )) > C:\Users\username\Documents\emp_details.txt 

和它不工作,得到下面的錯誤,

The system cannot find the file C:\Users\username\Documents\emp_details.txt. 

任何幫助,請..

+2

您嘗試寫入一個文件(即覆蓋,這意味着*刪除*文件),而在同一時間你正在讀它。使用(臨時)outfile,您可以稍後將其重命名爲原始名稱。 – Stephan

回答

3

在PowerShell中,你可以做這樣的:

$tmp = Get-Content 'C:\Users\username\Documents\emp_details.txt' 
$tmp[0..75], ':tech emp details', $tmp[76.. ($tmp.Count -1)] | 
    Set-Content 'C:\Users\username\Documents\emp_details.txt' 

注意:你可能wan't到Set-Content內指定編碼小命令。

+0

我也想包含':'的語句。在表達式或語句中獲得低於錯誤'意外的令牌':tech emp詳細信息'。' – Karthi1234

+0

您是否在PowerShell中運行了此操作?我沒有得到任何錯誤。 –

+0

是的,我在PowerShell上運行,它正在處理這個問題。我嘗試添加一些更特殊的字符,例如'=>'和'.',這不起作用 – Karthi1234

2

讀行後,將行寫入新文件;如果線路/包含搜索線,處理下一個輸入行之前添加另一行:

@echo off 
setlocal enableextensions disabledelayedexpansion 
set "searchstring=:non tech emp details" 
set "includestring=:tech emp details" 
(for /f "delims=" %%a in (t.txt) do (
    echo(%%a 
    REM alternative; use one of the two below lines: 
     rem if "%%a"=="%searchstring%" echo(%includestring% 
     echo %%a|findstr /b /c:"%searchstring%" >nul && echo(%includestring% 
)) > t.tmp 
move t.tmp t.txt 

注:空行會被忽略(刪除)。可以在需要時使用更多代碼進行調整。

(我想,它的確定依靠行號)

相關問題