ディレクトリ上で再帰し、UNIXファイルをWindowsファイルに変換できるWindowsの方法(Powershellやツールなど)を知っている人はいますか?.
少なくともunixファイルを検出するPowershellの方法に完全に満足しています。
1つのファイルに対してこれを行うのは簡単ですが、私はもう少しスケーラブルなものを求めています(したがって、Powershellishソリューションに傾いています)。
興味がある場合は、これが純粋なPowerShellの方法です。
UNIX行が少なくとも1行で終わるファイルの検索(PowerShell v1):
dir * -inc *.txt | %{ if (gc $_.FullName -delim "`0" | Select-String "[^`r]`n") {$_} }
UNIXの行末をWindowsの行末に変換する方法は次のとおりです。注意すべき重要な点の1つは、ファイルの最後に行末がない場合は、ファイルの最後に余分な行末(\ r\n)が追加されることです。本当にそれを望まないのであれば、それを回避する方法の例を投稿します(もう少し複雑です)。
Get-ChildItem * -Include *.txt | ForEach-Object {
## If contains UNIX line endings, replace with Windows line endings
if (Get-Content $_.FullName -Delimiter "`0" | Select-String "[^`r]`n")
{
$content = Get-Content $_.FullName
$content | Set-Content $_.FullName
}
}
上記が機能するのは、PowerShellが\ nの内容を自動的に分割し(存在する場合は\ rを削除)、ファイルに各内容(この場合は行)を書き込むときに\ r\nを追加するためです。そのため、常にファイルの最後で終わる行になってしまいます。
また、必要なファイルのみを変更するように上記のコードを記述しました。それを気にしない場合は、ifステートメントを削除できます。ああ、ファイルだけがForEach-Objectに到達することを確認してください。それ以外は、そのパイプラインの開始時に必要なフィルタリングを実行できます。
Cygwin にはdos2unixとunix2dosがあります。
これは私にとってはうまくいくようです。
Get-Content Unix.txt | Out-File Dos.txt
ダウンロード vim 、ファイルを開いて発行
:se fileformat=dos|up
複数のファイルのバッチ(C:\ tmp内のすべての* .txtファイル-再帰的):
:args C:\tmp\**\*.txt
:argdo se fileformat=dos|up
VisualStudioを使用できます。ファイル->詳細保存オプション...
Cygwinが適切でない場合、Googleを使用している場合、または自分で作成できる場合は、Windowsでunix2dos用のスタンドアロン実行可能ファイルが多数あります。同様の(変換の反対方向)質問 ここ を参照してください。
私は昨日6時間過ごしましたが、今日は10,000個のファイルを含むループで上記のコードをテストしました。ファイルの多くはサイズが50kbを超えています。結論として、PowerShellコードは、大きなファイルや多数のファイルに対して非常に非効率的/低速/使用できません。また、BOMバイトは保持されません。 unix2dos7.2.3が最速で最も実用的なソリューションであることがわかりました。これが他の人を助け、時間を節約することを願っています。
わたしにはできる:
Get-ChildItem -Recurse -File | % { $tmp = Get-Content $_; $tmp | Out-File "$_" -Encoding UTF8 }
これはどうですか(ネガティブな後ろ姿で)。 -nonewlineがない場合、set-contentは下部に余分な `r`nを置きます。括弧を使用すると、同じファイルを変更できます。
function unix2dos {
(Get-Content -raw $args[0]) -replace "(?<!`r)`n","`r`n" |
set-content -nonewline $args[0]
}
逆はこれで、WindowsからUNIXへのテキストです。
function dos2unix {
(Get-Content -raw $args[0]) -replace "`r`n","`n" |
set-content -nonewline $args[0]
}
例:
unix2dos file.txt
dos2unix file.txt
Emacsをお持ちの場合は、esc-xhexl-modeで確認できます。メモ帳はUNIXテキストを正しく表示しません。 -replaceはpspathを消去するため、set-contentのパスを指定する必要があります。
ワードパッドでUnixの行末のあるファイルを開いて保存すると、すべての行末がDOSとして書き換えられます。多数のファイルに対しては少し面倒ですが、たまにいくつかのファイルに対しては十分に機能します。