2017-06-08 2 views
1

mache ich einige Änderungen an einer Textdatei; Das Programm fügt jedoch Zeilen hinzu, anstatt sie zu ändern.Geben Sie eine Datei ein, ändern Sie die Zeilen und überschreiben Sie die Datei. Mit einer .bat-Datei

Da ich neu bin, können Sie mir helfen oder führen?

Hier ist mein Code:

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 \]: Befehlsumleitungsoperatoren verwenden] (https://technet.microsoft.com/en-us/library/bb490982.aspx): " _ ** >> ** - Hängt die Befehlsausgabe an das Ende einer Datei an, ohne die Information zu löschen, die sich bereits in der Datei befindet. _ ", Das ist das erwartete Verhalten. Eine Möglichkeit, Ihr Ziel zu erreichen, wäre, jede Zeile (ob modifiziert oder nicht) in einer anderen Datei (am Anfang leer) auszugeben und sie am Ende über die ursprüngliche zu verschieben. – CristiFati

Antwort

0

Da die gleiche Datei kann nicht gleichzeitig gelesen und geschrieben werden, erstellen Sie eine temporäre Datei in die geänderten Zeilen zu speichern.

Einige der Änderungen haben am Ende ein Leerzeichen. Durch Anführungszeichen wird deutlich, wo diese vorkommen. Vielleicht willst du das. Ich weiß es nicht.

Dann löschen Sie natürlich die temporäre Datei einmal abgeschlossen.

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

Hier ist ein "dirty" Trick:

@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% 

Der "Algorithmus":

+0

Beantwortet dies Ihre Frage? – CristiFati

Verwandte Themen