vol ver uso sirve script que para ejemplo comandos comando windows unix batch-file cmd eol

uso - Comando de Windows para convertir finales de línea Unix?



uso del comando ver (11)

¿Hay un comando de Windows para convertir las terminaciones de línea de un archivo?

Tenemos un test.bat que debemos ejecutar para iniciar nuestro servidor. Usamos Perforce y necesitamos tener terminaciones de línea Unix en nuestro espacio de trabajo. Por alguna razón, no podemos cambiar las terminaciones de línea a Windows en nuestros espacios de trabajo. Sin embargo, el servidor se ejecuta en Windows.

Cada vez que tengo que ejecutar el archivo bat, lo abro en Notepad ++ y selecciono Editar → Conversión EOL → Windows. ¿Existe alguna manera de automatizar esto para que no tengamos que cambiar manualmente las terminaciones de línea cada vez que sincronicemos con Perforce?

Gracias por adelantado.


Aprovechando las útiles respuestas de TampaHaze y MX XF.

Esto cambiará todos los archivos .txt en su lugar en el directorio actual de LF a CRLF en Símbolo del sistema

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

Si no quiere verificar cada cambio individual

movimiento

A

mover / y

Para incluir el cambio de subdirectorios

dir / b

A

dir / b / s

Para hacer todo esto en un archivo de proceso por lotes que incluye subdirectorios sin solicitar uso a continuación

@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


Basado en la respuesta de Endoro, pero para mantener los espacios en blanco, intente esto:

@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


Estaba lidiando con problemas CRLF , así que decidí crear una herramienta realmente simple para la conversión (en NodeJS):

Es la CLI del convertidor NoEJS EOL

Entonces, si tiene instalado NodeJS con npm , puede intentarlo:

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

La ruta puede configurarse dinámicamente usando Glob regex (la misma expresión regular que en shell).

Entonces, si puede usar NodeJS, es realmente simple y puede integrar este comando para convertir el espacio de trabajo completo en los finales de línea deseados.


Esto realmente se puede hacer muy fácilmente usando el comando more que se incluye en Windows NT y posterior. Para convertir input_filename que contiene UNIX EOL (End Of Line) /n a output_filename que contiene Windows EOL /r/n , simplemente haga esto:

TYPE input_filename | MORE /P > output_filename

El comando more tiene opciones de formato adicionales que puede que no tenga en cuenta. Ejecutar more/? para saber qué more puede hacer más.


Mi contribución para esto, convertir varios archivos en una carpeta: for %%z in (*.txt) do (for /f "delims=" %%i in (%%z) do @echo %%i)>%%z.tmp


Puede crear un script por lotes simple para hacer esto por usted:

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

A continuación, ejecute <batch script name> <FILE> y <FILE> se convertirá instantáneamente a los finales de línea de DOS.


Puede hacerlo sin herramientas adicionales en VBScript:

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

Coloque las líneas anteriores en un archivo unix2dos.vbs y ejecútelo así:

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

o así:

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

También puede hacerlo en PowerShell:

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

que podría simplificarse aún más a esto:

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

La sentencia anterior funciona sin un reemplazo explícito, porque Get-Content divide implícitamente los archivos de entrada en cualquier tipo de salto de línea (CR, LF y CR-LF), y Set-Content une la matriz de entrada con los saltos de línea de Windows (CR-LF) antes escribiéndolo en un archivo.


Use la utilidad unix2dos . Puedes descargar binarios here .


Windows ''MORE no es confiable, destruye los TAB inevitablemente y agrega líneas.

unix2dos es parte también de MinGW / MSYS, Cygutils, GnuWin32 y otras colecciones de puertos binarios de Unix, y es posible que ya esté instalado.

Cuando python está allí, este one-liner convierte los finales de línea a la plataforma actual, en cualquier plataforma:

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

o

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

O ponga el one-liner en un script .bat / shell y en el PATH según su plataforma:

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

y usar esa herramienta como

any2here UNIXFILE.EXT > MYPLATFILE.EXT


prueba esto:

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

Protocolo de sesión:

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 31 33 37 33 39 31 39 32 38 35 7.72001373919285 0000030: 34 37 0a 35 30 32 32 38 31 35 37 33 32 30 32 30 47.5022815732020 0000040: 35 32 34 0a 524. C:/TEST>(for /f "delims=" %i in (file.unix) do @echo %i)>file.dos C:/TEST>xxd -g1 file.dos 0000000: 36 31 36 38 39 36 32 39 33 30 38 31 30 38 36 35 6168962930810865 0000010: 0d 0a 34 38 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..


Insertar carro vuelve a un archivo de texto

@echo off set SourceFile=%1 rem c:/test/test.txt set TargetFile=%2 rem c:/test/out.txt if exist "%TargetFile%" del "%TargetFile%" for /F "delims=" %%a in (''type "%SourceFile%"'') do call :Sub %%a rem notepad "%TargetFile%" goto :eof :Sub echo %1 >> "%TargetFile%" if "%2"=="" goto :eof shift goto sub