web-dev-qa-db-ja.com

単純なcmdコマンドで.txtファイルから改行を削除しますか?

単純なcmdコマンドで.txtファイルから改行を削除するにはどうすればよいですか?

  • これはファイルを消去します:

    findstr "{\r\n}" %USERPROFILE%\Desktop\tt\t.txt %USERPROFILE%\Desktop\tt\t.txt > t.txt
    
  • これは役に立たない情報を追加しますが:

    findstr "." %USERPROFILE%\Desktop\tt\t.txt %USERPROFILE%\Desktop\tt\t.txt > t.txt
    
3
Elisha Habinsky

入力ファイルを2回指定しているため、データが2倍になります。

空の行を削除することが目的である場合、正しいコマンドから遠くありませんでした。

findstr "." "%USERPROFILE%\Desktop\tt\t.txt" > t.txt

現在のフォルダーが%USERPROFILE%\Desktop\ttでないことを確認してください。そうしないと、入力ファイルが上書きされます。あるいは、出力ファイルのフルパスを指定することもできます。

次の投稿も役立つかもしれません:
バッチまたはPowerShellを使用してテキストファイルから改行を削除する方法

すべての改行を完全に削除するために、次のスクリプトを使用しました。

@echo off
setlocal EnableDelayedExpansion
set row=
for /f %%x in (test.txt) do set "row=!row!%%x"
echo %row% >newfile.txt
echo %row%

上記のスクリプトの実行方法は次のとおりです。

enter image description here

6
harrymc

あなたができることの一つは、そこにいくつかのunix/linux/* nixコマンドを取得することです。そして、インターネット上のすべての例で、標準の 'tr'コマンドを使用します。 tr -d '\r\n' < input.txt > output.txtは、\ r文字、\ n文字、および任意の\ r\nシーケンス(または、任意の\ n\rシーケンスを削除しますが、そのようなものはありません)。 Cygwinにはいくつかのコマンドがあります。 xxdコマンドも、ファイルの内容を確認するのに適しています。 Cygwinにはそれが含まれています。

答えはfindstrを使用することが可能であることを示しているので、それは大丈夫です..しかし、私がcmd.exeの「for」コマンドを見て本当に混乱する何かをしなければならない場合、私はおそらく* nixスタイルのコマンドを探します「for」よりも簡単なものがある、例えば'tr'!

注-一部コメント作成者のItWasn'tMeは、cygwinシェル以外のcmd.exeでcygwinコマンドを使用できることを認識していませんが、使用できます。それにもかかわらず、OPはネイティブソリューションを探していることを示唆するコメントをしましたが、OPはそれを彼の質問に入れるべきでした。

3
barlop

FOR /F "tokens=*" %i IN (t.txt) DO @echo|set /p="%i" >> t2.txt

  • FOR /F "tokens=*" %i IN (t.txt) ..はtxtファイルを1行ずつ処理します。%iは行全体です。
  • @echo|set /p="%i"は、改行なしで行をエコーし​​ます( source )。
  • >> t2.txtは、すべての出力を新しいファイルにコピーします(OPが要求したように、すべての改行文字が削除されているため、すべての行が1つの行に効果的に連結されます)。

結果:

C:\Users\me\Documents>type t.txt
some line
SOME OTHER LINE
>
lolwut
Some Person
SOMEBUSINESS

SomeBusiness after an empty line
Users
Line with "quotes"
Wow look at this weird characters ÎøÎñÎ[{()}]ÖοÎö neat!
C:\Users\me\Documents>FOR /F "tokens=*" %i in (t.txt) do @echo|set /p="%i" >> t2.txt

C:\Users\me\Documents>type t2.txt
some lineSOME OTHER LINE>lolwutSome PersonSOMEBUSINESSSomeBusiness after an empty lineUsersLine with "quotes"Wow look at this weird characters ÎøÎñÎ[{()}]ÖοÎö neat!
C:\Users\me\Documents>

出力ファイルを入力ファイルと同じにする必要がある場合は、move(またはcopyまたはtype > or ...)t2.txt over t.txt。これが単一の.cmdファイルでどのように見えるかの例:

@ECHO OFF
FOR /F "tokens=*" %i IN (t.txt) DO @echo|set /p="%i" >> t2.txt
MOVE /Y t2.txt t.txt
3
walen

((Get-Content ${Env:USERPROFILE}'\Desktop\tt\t.txt' -Raw) -replace "(?m)^\s*`r`n",'').trim() | Set-Content .\t.txt


  • これは役に立たない情報を追加します:
  • findstr "." %USERPROFILE%\Desktop\tt\t.txt %USERPROFILE%\Desktop\tt\t.txt> t.txt

実際、上記のコマンドでこの作業を実行できますが、これは機能しないと考えています。また、user nameスペースがある( "複合名" == "エリシャ・ハビンスキー" )


  • コマンドを次のようなレイアウトにします。
findstr "." c:\Users\Elisha Habinsky\Desktop\tt\t.txt c:\Users\Elisha Habinsky\Desktop\tt\t.txt

1)"%USERPROFILE%\Desktop\tt\t.txt"および %USERPROFILE%\Desktop\tt\t.txt"> t.txt

2)regex:で引用符を使用する必要はありません"."

3)これは.は任意の文字、またスペースを意味します、タブ。

4)ファイルにタブのみの行がある場合空白行は100%空白ではないため、これらの行もファイル出力に保存されます!

5)t.tmpファイルを使用してこのジョブを実行することを検討してください。

6)ここで最後の行のコードでバットのコードを使用することをお勧めします。これらの行をコピーしてfile.cmdとして保存します。 batは、空白の行かどうかに関係なく、すべてのタブを削除します。


>.\t.txt findstr . "%USERPROFILE%\Desktop\tt\t.txt"

rem :: or ::

findstr . "%USERPROFILE%\Desktop\tt\t.txt"  >.\t.txt

タブしかない行の場合:


  • コマンドラインの場合(1行):
for /f "delims= " %T in ('robocopy /L . . /njh /njs')do set "_tab=%T" && findstr . .\t.txt >"%temp%\t.tmp" && >.\t.txt (for /f tokens^=* %i in ('type "%temp%\t.tmp"^|find /v "%_tab%"')do @echo/%i) && del /q "%temp%\t.tmp"

  • バッチ/ cmdファイルの場合:
@echo off && SetLocal EnableDelayedExpansion

for /f "delims= " %%T in ('robocopy /L . . /njh /njs')do set "_tab=%%T"
findstr . "%USERPROFILE%\Desktop\tt\t.txt" >"%temp%\t.tmp"

>.\t.txt (for /f tokens^=* %%i in ('type "%temp%\t.tmp"
')do set "_line=%%~i"&& cmd /v/c echo/!_line:%_tab%=!
) && >nul del /q "%temp%\t.tmp" && endlocal
.\t.txt && exit /b || goto :eof

英語

2
It Wasn't Me