2017-06-08 48 views
1

我正在對文本文件進行一些修改;但是該程序正在添加行而不是修改它們。在文件上輸入,修改行並覆蓋文件。使用.bat文件

因爲我對它很陌生,你能幫助或引導我嗎?

這裏是我的代碼:

setlocal enabledelayedexpansion 
for /f "delims=" %%a in (economic_changes.txt) do ( 
    SET s='%%a 
    SET s=!s:;= ! 
    SET s=!s:- =-;;! 
    SET s=!s: -=-! 
    SET s=!s:-;;-=-;-! 
    SET s=!s:-=%! 
    SET s=!s:_= %! 
    SET s=!s:;=';'%! 
    SET s=!s:;'';'=;;%! 

    echo !s! 
) >> "%userprofile%\desktop\Economic_Folder\economic_changes.txt" 
+0

[\ [MSDN \]:使用命令重定向操作符(https://technet.microsoft.com/en-us/library/bb490982.aspx):「 _ ** >> ** - 將命令輸出附加到文件的末尾而不刪除已存在於file._中的信息,因此這是預期的行爲。實現你的目標的一種方法是在不同的文件中輸出每一行(不管它是否被修改)(在開始時爲空),並在最後移動它。 – CristiFati

回答

0

由於相同的文件不能被讀取,並在同一時間寫的,創建一個臨時文件,在修改行存入。

幾個修改在最後有SPACE字符。使用引號可以清楚說明發生的位置。也許你想要那些。我不知道。

然後,當然,刪除臨時文件一旦完成。

setlocal enabledelayedexpansion 

SET "TMPFILE=%TEMP%\file_converter_%RANDOM%.tmp" 
IF EXIST "%TMPFILE%" (DEL "%TMPFILE%") 

for /f "delims=" %%a in (economic_changes.txt) do (
    SET "s='%%a " 
    SET "s=!s:;= ! " 
    SET "s=!s:- =-;;! " 
    SET "s=!s: -=-! " 
    SET "s=!s:-;;-=-;-! " 
    SET "s=!s:-=%!" 
    SET "s=!s:_= %!" 
    SET "s=!s:;=';'%!" 
    SET "s=!s:;'';'=;;%!" 

    echo>>"%TMPFILE% !s! 
) 

COPY /Y "%TMPFILE%" "%USERPROFILE%\Desktop\Economic_Folder\economic_changes.txt" 
IF EXIST "%TMPFILE%" (DEL "%TMPFILE%") 
0

這裏有一個 「髒」 的絕招:

@echo off 
setlocal enabledelayedexpansion 

set _FILE="%userprofile%\desktop\Economic_Folder\economic_changes.txt" 
for /f %%a in ('type %_FILE% ^&^& echo.^>NUL 2^>%_FILE%') do (
    SET s='%%a 
    SET s=!s:;= ! 
    SET s=!s:- =-;;! 
    SET s=!s: -=-! 
    SET s=!s:-;;-=-;-! 
    SET s=!s:-=%! 
    SET s=!s:_= %! 
    SET s=!s:;=';'%! 
    SET s=!s:;'';'=;;%! 

    echo !s! 
) >> %_FILE% 

的 「算法」:

+0

這是否回答你的問題? – CristiFati