78

ファイルの行末を変換する Windows コマンドはありますか?

test.batサーバーを起動するために実行する必要がある があります。Perforce を使用しており、ワークスペースに UNIX の行末が必要です。何らかの理由で、ワークスペースで行末を Windows に変更することは許可されていません。ただし、サーバーは Windows 上で実行されます。

バット ファイルを実行する必要があるたびに、メモ帳 ++ で開き、[編集] → [EOL 変換] → [Windows] を選択します。Perforce と同期するたびに行末を手動で変更する必要がないように、これを自動化する方法はありますか?

前もって感謝します。

4

17 に答える 17

64

moreこれは、実際には、Windows NT 以降に含まれているコマンドを使用して非常に簡単に実行できます。input_filenameUNIX EOL (End Of Line)\noutput_filename含むものを Windows EOL を含むものに変換するには\r\n、次のようにします。

TYPE input_filename | MORE /P > output_filename

このmoreコマンドには、知らないかもしれない追加の書式設定オプションがあります。more/?他に何ができるかを学ぶために走ってmoreください。

于 2015-01-08T16:08:45.690 に答える
30

unix2dosユーティリティを使用します。バイナリはここからダウンロードできます。

于 2013-07-10T19:48:00.440 に答える
16

これは、VBScript の追加ツールなしで実行できます。

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

上記の行をファイルに入れて、次のようunix2dos.vbsに実行します。

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

またはこのように:

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

PowerShell でも実行できます。

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

これはさらに次のように単純化できます。

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

上記のステートメントは、Get-Content入力ファイルをあらゆる種類の改行 (CR、LF、および CR-LF) で暗黙的に分割Set-Contentし、ファイルに書き込む前に入力配列を Windows の改行 (CR-LF) と結合するため、明示的な置換なしで機能します。

于 2013-07-10T20:42:34.857 に答える
8

TampaHaze と MD XF の役立つ回答に基づいています。

これにより、現在のディレクトリにあるすべての .txt ファイルが、コマンド プロンプトで LF から CRLF に変更されます。

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

すべての変更を確認したくない場合

動く

移動 /y

サブディレクトリの変更を含めるには

ディレクトリ/b

dir /b /s

ファイルのプロンプトを表示せずにサブディレクトリを含むバッチ ファイルでこれらすべてを実行するには、.txt以下を使用します。

@echo off
setlocal enabledelayedexpansion

for /f "delims=" %%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
于 2018-05-03T12:32:06.453 に答える
6

これを試して:

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

セッション プロトコル:

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..
于 2013-07-10T21:11:56.613 に答える
3

これに対する私の貢献、フォルダー内の複数のファイルの変換: for %%z in (*.txt) do (for /f "delims=" %%i in (%%z) do @echo %%i)>%%z.tmp

于 2013-11-07T22:22:24.753 に答える
3

bash (git bash など) を使用している場合は、次のスクリプトを使用して unix2dos から変換できます。

ex filename.ext <<EOF
:set fileformat=dos
:wq
EOF

同様に、dos2unix から変換するには:

ex filename.ext <<EOF
:set fileformat=unix
:wq
EOF
于 2019-10-03T21:48:01.053 に答える
1

Endoroの答えに基づいていますが、空白を保つために、これを試してください:

@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
于 2014-08-08T15:02:45.223 に答える
-2

テキスト ファイルへのキャリッジ リターンの挿入

@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
于 2013-07-10T20:15:32.587 に答える