ファイルの行末を変換するWindowsコマンドはありますか?
サーバーを起動するために実行する必要があるtest.bat
があります。 Perforceを使用しており、ワークスペースにUNIXの行末を含める必要があります。何らかの理由で、ワークスペースで行末をWindowsに変更することはできません。ただし、サーバーはWindows上で実行されます。
Batファイルを実行するたびに、Notepad ++で開き、[編集]→[EOL変換]→[Windows]を選択します。 Perforceと同期するたびに行末を手動で変更する必要がないように、これを自動化する方法はありますか?
前もって感謝します。
これは実際には、Windows NT以降に含まれているmore
コマンドを使用して非常に簡単に実行できます。 UNIX EOLを含むinput_filename
(行末)\n
をWindows EOLを含むoutput_filename
に変換する\r\n
には、次のようにします。
TYPE input_filename | MORE /P > output_filename
more
コマンドには、知らない追加のフォーマットオプションがあります。 more/?
を実行して、他のmore
ができることを確認します。
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)ファイルに書き込む前。
私はCRLF
の問題を扱っていたので、(NodeJSで)変換のための本当に簡単なツールを構築することにしました。
NodeJS with npmがインストールされている場合は、試してみてください:
npm i -g eol-converter-cli
eolConverter crlf "**/*.{txt,js,Java,etc}"
Glob正規表現(シェルと同じ正規表現)を使用して、パスを動的に構成できます。
したがって、NodeJSを使用できる場合は、非常に簡単であり、このコマンドを統合して、ワークスペース全体を目的の行末に変換できます。
WindowsのMOREは信頼性が低く、TABを必然的に破壊し、行を追加します。
nix2dos は、MinGW/MSYS、Cygutils、GnuWin32、およびその他のUNIXバイナリポートコレクションの一部でもあり、既にインストールされている場合があります。
python が存在する場合、このワンライナーは行末を現在のプラットフォームに変換します-任意のプラットフォームで:
TYPE UNIXFILE.EXT | python -c "import sys; sys.stdout.write(sys.stdin.read())" > MYPLATFILE.EXT
または
python -c "import sys; sys.stdout.write(open(sys.argv[1]).read())" UNIXFILE.EXT > MYPLATFILE.EXT
または、ワンライナーを.bat/Shellスクリプトに入れ、プラットフォームに応じてPATHに入れます:
@REM This is any2here.bat
python -c "import sys; sys.stdout.write(open(sys.argv[1]).read())" %1
そのようなツールを使用します
any2here UNIXFILE.EXT > MYPLATFILE.EXT
TampaHazeおよびMD XFの有益な回答に基づいて作成します。
これにより、現在のディレクトリのすべての.txtファイルがin placeからコマンドプロンプトでLFからCRLFに変更されます。
for /f %f in ('dir /b "*.txt"') do ( type %f | more /p > %f.1 & move %f.1 %f )
すべての変更を確認したくない場合
動く
に
移動/ y
サブディレクトリの変更を含めるには
dir/b
に
dir/b/s
以下の使用を促すことなく、サブディレクトリを含むバッチファイルでこれをすべて実行するには
@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
これを試して:
(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 ..
これに対する私の貢献、フォルダー内のいくつかのファイルの変換:for %%z in (*.txt) do (for /f "delims=" %%i in (%%z) do @echo %%i)>%%z.tmp
これを行うための簡単なバッチスクリプトを作成できます。
TYPE %1 | MORE /P >%1.1
MOVE %1.1 %1
次に<batch script name> <FILE>
を実行すると、<FILE>
はすぐにDOSの行末に変換されます。
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
windows
のgit bash
を使用してgitプロジェクトのクローンを作成しました。すべてのファイルには、LF
の末尾が付いていました。リポジトリには、デフォルトとしてCRLF
の末尾があります。
プロジェクトを削除し、Windows Command Prompt
を使用して再度クローンを作成しました。 CRLF
の末尾はそのままでした。私の場合、プロジェクトのエンディングを変更していた場合、それは大きなコミットをもたらし、チームメイトに問題を引き起こしていました。だから、このようにしました。これが誰かを助けることを願っています。
私はAWSコースを受講しており、AWS WebフォームのテキストボックスからWindows Notepadに頻繁にコピーする必要がありました。そのため、LFで区切られたテキストはクリップボードにのみ表示されます。 Delphiエディターに貼り付けてからCtrl + K + Wを押すと、CR + LF区切り文字でファイルにテキストが書き込まれることを偶然発見しました。 (他の多くのIDEエディターも同じことをするでしょう)。