it-swarm.com.de

Windows-Befehl zum Konvertieren von Unix-Zeilenenden?

Gibt es einen Windows-Befehl zum Konvertieren von Zeilenenden einer Datei?

Wir haben einen test.bat, den wir ausführen müssen, um unseren Server zu starten. Wir verwenden Perforce und müssen Unix-Zeilenenden in unserem Arbeitsbereich haben. Aus irgendeinem Grund dürfen wir die Zeilenenden in unseren Arbeitsbereichen nicht in Windows ändern. Der Server läuft jedoch unter Windows.

Jedes Mal, wenn ich die bat-Datei ausführen muss, öffne ich sie in Notepad ++ und wähle Bearbeiten → EOL-Konvertierung → Windows. Gibt es eine Möglichkeit, dies zu automatisieren, damit wir die Zeilenenden nicht jedes Mal manuell ändern müssen, wenn wir mit Perforce synchronisieren?

Danke im Voraus.

58
Deepti Jain

Dies kann tatsächlich sehr einfach mit dem more-Befehl ausgeführt werden, der in Windows NT und höher enthalten ist. Um input_filename, der UNIX EOL (End Of Line) \n enthält, in output_filename zu konvertieren, der Windows EOL \r\n enthält, führen Sie einfach Folgendes aus:

TYPE input_filename | MORE /P > output_filename

Der Befehl more verfügt über zusätzliche Formatierungsoptionen, die Sie möglicherweise nicht kennen. Führen Sie more/? aus, um zu erfahren, was more noch tun kann. 

54
TampaHaze

Verwenden Sie unix2dos utility. Sie können Binaries herunterladen hier .

26
David Jashi

Sie können dies ohne zusätzliche Tools in VBScript tun:

Do Until WScript.StdIn.AtEndOfStream
  WScript.StdOut.WriteLine WScript.StdIn.ReadLine
Loop

Füge die obigen Zeilen in eine Datei unix2dos.vbs ein und führe es so aus:

cscript //NoLogo unix2dos.vbs <C:\path\to\input.txt >C:\path\to\output.txt

oder so:

type C:\path\to\input.txt | cscript //NoLogo unix2dos.vbs >C:\path\to\output.txt

Sie können dies auch in PowerShell tun:

(Get-Content "C:\path\to\input.txt") -replace "`n", "`r`n" |
  Set-Content "C:\path\to\output.txt"

was noch weiter vereinfacht werden könnte:

(Get-Content "C:\path\to\input.txt") | Set-Content "C:\path\to\output.txt"

Die obige Anweisung funktioniert ohne explizite Ersetzung, da Get-Content Eingabedateien bei jeder Art von Zeilenumbruch (CR, LF und CR-LF) implizit aufteilt und Set-Content das Eingabearray mit Windows-Zeilenumbrüchen (CR-LF) verbindet, bevor es in eine Zeile geschrieben wird Datei.

15
Ansgar Wiechers

Windows 'MORE' ist nicht zuverlässig, es zerstört TABs unweigerlich und fügt Zeilen hinzu.

unix2dos gehört auch zu MinGW/MSYS, Cygutils, GnuWin32 und anderen binären Unix-Port-Sammlungen - und kann bereits installiert sein.

Wenn Python vorhanden ist, konvertiert dieser One-Liner alle Zeilenenden in die aktuelle Plattform - auf einer beliebigen Plattform:

TYPE UNIXFILE.EXT | python -c "import sys; sys.stdout.write(sys.stdin.read())" > MYPLATFILE.EXT

oder

python -c "import sys; sys.stdout.write(open(sys.argv[1]).read())" UNIXFILE.EXT > MYPLATFILE.EXT

Oder fügen Sie den One-Liner in ein .bat/Shell-Skript und auf den PATH entsprechend Ihrer Plattform ein:

@REM This is any2here.bat
python -c "import sys; sys.stdout.write(open(sys.argv[1]).read())" %1

und benutze das Tool gerne

any2here UNIXFILE.EXT > MYPLATFILE.EXT
10
kxr

Ich beschäftigte mich mit CRLF-Problemen und beschloss, ein wirklich einfaches Werkzeug für die Konvertierung (in NodeJS) zu erstellen:

Es ist NodeJS EOL-Konverter CLI

Wenn Sie also NodeJS mit npm installiert haben, können Sie es versuchen:

npm i -g eol-converter-cli
eolConverter crlf "**/*.{txt,js,Java,etc}"

Der Pfad kann unter Verwendung des Glob-Regex (der gleiche Regex wie in Shell) dynamisch konfiguriert werden.

Wenn Sie NodeJS verwenden können, ist dies sehr einfach und Sie können diesen Befehl integrieren, um den gesamten Arbeitsbereich in die gewünschten Zeilenenden umzuwandeln.

6
Jurosh

Aufbauend auf den hilfreichen Antworten von TampaHaze und MD XF. 

Dadurch werden alle TXT-Dateien in Stelle im aktuellen Verzeichnis von LF in CRLF in der Eingabeaufforderung geändert

for /f %f in ('dir /b "*.txt"') do ( type %f | more /p > %f.1 & move %f.1 %f )

Wenn Sie nicht jede einzelne Änderung überprüfen möchten 

bewegung

Zu 

bewegen Sie/y

Um Unterverzeichnisse zu ändern

dir/b

Zu

dir/b/s

Um dies alles in einer Batch-Datei einschließlich der Unterverzeichnisse zu tun, ohne die Verwendung unten zu bestätigen

@echo off
setlocal enabledelayedexpansion

for /f %%f in ('dir /s /b "*.txt"') do (
    type %%f | more /p > %%f.1 
    move /y %%f.1 %%f > nul
    @echo Changing LF-^>CRLF in File %%f
)
echo.
pause
6
uosjead

versuche dies:

(for /f "delims=" %i in (file.unix) do @echo %i)>file.dos

Sitzungsprotokoll:

 C:\TEST> xxd -g1 file.unix .__0000000: 36 31 36 38 39 36 32 39 33 30 38 31 30 38 36 35 6168962930810865 .__ 0000010: 0a 34 38 36 38 39 37 34 36 33 32 36 31 38 31 39 .486897463261819. 0000020: 37 0a 37 32 30 30 33 33 33 31 31 32 38 35 7.72001373919285 .__ 0000030: 34 37 0a 35 32 32 31 35 32 32 30 32 30 47.5022815732020 
 0000040: 35 32 34 0a 524 .

 C:\TEST> (für/f "delims ="% i in (file.unix) do @echo% i)>. dos 

 C:\TEST> xxd -g1 datei.dos .__0000000: 36 31 36 38 39 36 32 39 33 30 38 31 30 38 36 35 6168962930810865 .__ 0000010: 0d 0a 34 36 36 38 39 37 34 36 33 32 36 31 38 31 ..48689746326181 0000020: 39 37 0d 0a 37 32 30 30 31 33 37 33 39 31 39 32 97..720013739192. 0000030: 38 35 34 37 0d 0a 35 30 32 32 38 31 35 37 33 32 8547..5022815732 ... 0000040: 30 32 30 35 32 34 0d 0a 020524 ..
5
Endoro

Mein Beitrag dazu, mehrere Dateien in einem Ordner zu konvertieren: for %%z in (*.txt) do (for /f "delims=" %%i in (%%z) do @echo %%i)>%%z.tmp

3
Ricardo

Sie können ein einfaches Batch-Skript erstellen, um dies für Sie zu erledigen:

TYPE %1 | MORE /P >%1.1
MOVE %1.1 %1

Dann führen Sie <batch script name> <FILE> und <FILE> sofort in DOS-Zeilenenden aus.

1
MD XF

Basierend auf der Antwort von Endoro, versuchen Sie jedoch Folgendes:

@echo off
setlocal enabledelayedexpansion
(for /f "tokens=* delims=:" %%i in ('findstr /n "^" file.unix') do (
        set line=%%i
        set line=!line:*:=!
        echo(!line!
        ))>file.dos
1
Ir Relevant

Ich habe mein Git-Projekt mit dem git bash auf windows geklont. Alle Dateien hatten dann LF Endungen. Unser Repository hat standardmäßig CRLF Endungen.

Ich habe das Projekt gelöscht und dann mit Windows Command Prompt erneut geklont. Die CRLF-Enden waren dann intakt. Wenn ich die Endungen für das Projekt geändert hätte, hätte dies in meinem Fall zu einem großen Commit geführt und hätte meinen Teamkollegen Ärger gebracht. Also, habe es so gemacht. Hoffe das hilft jemandem. 

0
retr0

Ich nehme an einem AWS-Kurs teil und musste häufig Textfelder in den AWS-Webformularen in Windows Notepad kopieren. So bekomme ich den LF-begrenzten Text nur in meine Zwischenablage. Ich habe aus Versehen festgestellt, dass das Einfügen in meinen Delphi-Editor und das anschließende Drücken von Strg + K + W den Text in eine Datei mit CR + LF-Begrenzern schreibt. (Ich wette, dass viele andere IDE Redakteure dasselbe tun würden).

0
RHenningsgard