FTK Imager Lite を使用して、Linux SDカードからいくつかのファイル(Python、シェルスクリプトなど、テキストファイルのみ)をレスキューしました。ファイルは問題ありませんが、最後に0x00
バイトがたくさん含まれています。
これらの末尾の0x00
バイトをWindowsマシンで一括削除するにはどうすればよいですか?
私はfor
コマンドに精通しているので、1つのファイルに対してそれを行う方法についての提案で十分です。その後、すべてのファイルに適用できます。
MOREコマンドを使用して、各\ 0x00を\ 0x0D\0x0Aに変換できます。
more yourFile.ext >yourFile.ext.new
move /y yourFile.ext.new yourFile.ext >nul
警告:
より堅牢な代替手段は、 JREPL.BAT -Windows用の正規表現テキスト処理コマンドラインユーティリティを使用することです。これは、XP以降の任意のWindowsマシンでネイティブに実行される純粋なスクリプト(JScript /バッチ)です。サードパーティのexeファイルは必要ありません。
ファイルが大きすぎない(1GBに近い?)限り、/ Mオプションを使用してファイル全体をメモリに読み込み、1つの大きな文字列に対して検索/置換操作を実行できます。
jrepl \x00 "" /m /f yourFile.ext /o -
大きなファイルの場合、ファイルを1行ずつ処理できますが、ヌルバイトでは入力に文字セットを指定する必要があるため、ADOを強制的に使用します。標準のJScriptファイル入力ルーチンは、nullバイトを含む行でチョークします。 ADOはその問題を解決します。1バイトの文字セットである限り、どの文字セットを選択してもかまいません。
jrepl \x00 "" /f "yourFile.ext|windows-1252" /o -
完全なドキュメントはJREPL.BATに組み込まれており、ページングされたヘルプについてはjrepl /?
またはjrepl /??
から入手できます。すべてのオプションの概要はjrepl /?options
から入手でき、すべてのヘルプオプションの説明はjrepl /?help
から入手できます。
JREPL.BATは、この1つのタスクのための多くのコードです。このタスクのために非常に小さな専用のJScriptまたはVBSスクリプトを作成するのは難しいことではありません。しかし、JREPLを兵器庫に入れると、多くの用途が見つかる可能性があります。これは強力なツールです。
PowerShellソリューションのコアは次のようになります。
$file = "C:\Users\keith\SomeFile.txt"
$Bytes = [IO.File]::ReadAllBytes($file)
$i = $Bytes.Length - 1
While ($Bytes[$i] -eq 0) { $i-- }
$Bytes = $Bytes[0..$i]
[IO.File]::writeAllBytes($file, $bytes)