คำสั่ง Windows เพื่อแปลงการสิ้นสุดบรรทัด Unix หรือไม่

มีคำสั่ง Windows ให้แปลงการสิ้นสุดบรรทัดของไฟล์หรือไม่?

เรามี test.bat ซึ่งเราต้องเรียกใช้เพื่อเริ่มต้นเซิร์ฟเวอร์ของเรา เราใช้ Perforce และจำเป็นต้องมีการลงท้ายบรรทัด Unix ในพื้นที่ทำงานของเรา ด้วยเหตุผลบางประการ เราไม่ได้รับอนุญาตให้เปลี่ยนการลงท้ายบรรทัดเป็น Windows ในพื้นที่ทำงานของเรา อย่างไรก็ตาม เซิร์ฟเวอร์ทำงานบน Windows

ทุกครั้งที่ฉันต้องเรียกใช้ไฟล์ bat ฉันจะเปิดมันใน Notepad++ แล้วเลือก EditEOL ConversionWindows มีวิธีที่จะทำให้สิ่งนี้เป็นอัตโนมัติเพื่อที่เราจะได้ไม่ต้องเปลี่ยนการลงท้ายบรรทัดด้วยตนเองทุกครั้งที่เราซิงค์กับ Perforce หรือไม่

ขอบคุณล่วงหน้า.


person Deepti Jain    schedule 10.07.2013    source แหล่งที่มา


คำตอบ (17)


ซึ่งจริงๆ แล้วสามารถทำได้ง่ายมากโดยใช้คำสั่ง more ซึ่งรวมอยู่ใน Windows NT และใหม่กว่า หากต้องการแปลง input_filename ซึ่งมี UNIX EOL (สิ้นสุดบรรทัด) \n เป็น output_filename ซึ่งมี Windows EOL \r\n ให้ทำดังนี้:

TYPE input_filename | MORE /P > output_filename

คำสั่ง more มีตัวเลือกการจัดรูปแบบเพิ่มเติมที่คุณอาจไม่ทราบ วิ่ง more/? เพื่อเรียนรู้ว่า more ทำอะไรได้อีกบ้าง

person TampaHaze    schedule 08.01.2015
comment
สิ่งนี้ยังคงใช้งานได้ดีใน Windows 9 ขอบคุณ! อาจเป็นที่น่าสังเกตว่าต้องมีไฟล์ output_filename ก่อนที่จะรันคำสั่งนี้ และเนื้อหาของไฟล์จะถูกเขียนทับ - person SCBuergel; 18.12.2015
comment
ดูเหมือนว่าจะเพิ่มการขึ้นบรรทัดใหม่เพิ่มเติมให้กับไฟล์ที่ไม่ได้ลงท้ายด้วยการขึ้นบรรทัดใหม่ โปรดทราบล่วงหน้าว่าสิ่งนี้สำคัญสำหรับสถานการณ์เฉพาะของคุณหรือไม่ - person aolszowka; 17.02.2016
comment
น่าเสียดายที่นี่ยังทำให้แท็บทั้งหมดเสียการเว้นวรรคด้วย - person Colin; 22.12.2016
comment
ฉันต้องการสิ่งที่ตรงกันข้ามกับสิ่งนี้ มีความคิดอะไรบ้าง? - person Ross Brigoli; 09.02.2017
comment
คำตอบที่ดี! ง่ายกว่าเล็กน้อย: more /P <input_file >output_file - person Dimagog; 28.03.2017
comment
@Sebastian Windows 9 คืออะไร? - person MD XF; 10.05.2017
comment
@adrianTNT คุณทำ TYPE input_file | MORE /P > input_file - person Andrew Steitz; 31.08.2017
comment
@AndrewSteitz เขาต้องการการแปลงแบบแทนที่ - person Franklin Yu; 14.03.2018
comment
@FranklinYu คุณพูดถูก ตอนแรกฉันรู้สึกสับสนกับความคิดเห็นของคุณ จากนั้นฉันก็รู้ว่าในความคิดเห็นก่อนหน้าฉันลืม ? เพราะฉันถาม (แย่มาก) ว่าเขาพิมพ์สิ่งนั้นในบรรทัดคำสั่งจริงหรือไม่ โด้! ฉันกำลังถาม (ตั้งใจจะถาม) เขาเพราะฉันแน่ใจว่ามันได้ผลและพยายามให้แน่ใจ 100% ด้วยซ้ำ เครื่องหมายวรรคตอนมีความสำคัญ (และฉันก็โง่) ฉันชอบตัวอย่าง กินได้ไหม คุณยาย? vs เรากินคุณยายได้ไหม? (อย่างแรกถามยายว่ากินได้ไหม อย่างที่สองถามคนอื่นว่ากินได้ไหม 555) ขอบคุณที่ชี้ให้เห็นข้อผิดพลาดของฉันเพื่อที่ฉันจะได้ชี้แจง!!! - person Andrew Steitz; 15.03.2018

ใช้ยูทิลิตี unix2dos คุณสามารถดาวน์โหลดไบนารีได้ที่นี่

person David Jashi    schedule 10.07.2013
comment
มันเป็นทางเลือกแทน Notepad++ อีกครั้ง จะไม่ได้รับสิ่งนี้โดยอัตโนมัติจริงๆ ฉันจะต้องเรียกใช้เครื่องมือนี้ ฉันเปลี่ยนการลงท้ายบรรทัดด้วย notepad++ ณ ตอนนี้ - person Deepti Jain; 11.07.2013
comment
มันเป็นเครื่องมือบรรทัดคำสั่ง และเหมาะสำหรับระบบอัตโนมัติมากกว่าและเครื่องมือ GUI คุณอาจเขียนงาน at เป็นระยะ ซึ่งจะกรองไฟล์ทั้งหมดในบางโฟลเดอร์ที่คุณใส่ไฟล์แบตช์เข้าไป ทุกอย่างขึ้นอยู่กับว่าคุณหมายถึงอะไรด้วยระบบอัตโนมัติ - person David Jashi; 11.07.2013

ฉันกำลังจัดการกับปัญหา CRLF ดังนั้นฉันจึงตัดสินใจสร้างเครื่องมือที่ง่ายมากสำหรับการแปลง (ใน NodeJS):

มันคือ CLI ตัวแปลง NodeJS EOL

ดังนั้นหากคุณติดตั้ง NodeJS พร้อม npm คุณสามารถลองได้:

npm i -g eol-converter-cli
eolConverter crlf "**/*.{txt,js,java,etc}"

เส้นทางอาจถูกกำหนดค่าแบบไดนามิกโดยใช้ Glob regex (regex เดียวกันกับในเชลล์)

ดังนั้นหากคุณสามารถใช้ NodeJS ได้ มันก็ง่ายมาก และคุณสามารถรวมคำสั่งนี้เพื่อแปลงพื้นที่ทำงานทั้งหมดให้เป็นจุดสิ้นสุดบรรทัดที่ต้องการได้

person Jurosh    schedule 28.06.2017
comment
ดูเหมือนว่าโซลูชันของคุณจะโดน reddit.com/r/ programmingcirclejerk/comments/6t3kel/ - person Mikhail; 13.08.2017

คุณสามารถทำได้โดยไม่ต้องใช้เครื่องมือเพิ่มเติมใน 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) ก่อนที่จะเขียนลงใน ไฟล์.

person Ansgar Wiechers    schedule 10.07.2013

Windows' MORE ไม่น่าเชื่อถือ แต่จะทำลาย TAB อย่างหลีกเลี่ยงไม่ได้และเพิ่มบรรทัด

unix2dos เป็นส่วนหนึ่งของ MinGW/MSYS, Cygutils, GnuWin32 และคอลเลกชันพอร์ตไบนารียูนิกซ์อื่น ๆ - และอาจจะแล้ว จะถูกติดตั้ง

เมื่อ python อยู่ที่นั่น ซับเดียวนี้จะแปลงการลงท้ายบรรทัดใดๆ ให้เป็นแพลตฟอร์มปัจจุบัน - บน แพลตฟอร์มใดก็ได้:

TYPE UNIXFILE.EXT | python -c "import sys; sys.stdout.write(sys.stdin.read())" > MYPLATFILE.EXT

or

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
person kxr    schedule 26.02.2016

สร้างจากคำตอบที่เป็นประโยชน์ของ TampaHaze และ MD XF

สิ่งนี้จะเปลี่ยนไฟล์ .txt ทั้งหมด ในตำแหน่ง ในไดเรกทอรีปัจจุบันจาก LF เป็น CRLF ใน Command Prompt

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

หากคุณไม่ต้องการยืนยันทุกการเปลี่ยนแปลง

เคลื่อนไหว

To

ย้าย / ปี

เพื่อรวมการเปลี่ยนแปลงไดเรกทอรีย่อย

ผบ. /ข

To

ผบ. /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
person uosjead    schedule 03.05.2018
comment
ไม่ สิ่งนี้จะล้มเหลวโดยสิ้นเชิงหากมีช่องว่างในพาธของไฟล์ เช่น C:\Program Files\FileMaker\FileMaker Server\HTTPServer\conf\ - person John Smith; 21.07.2021

ลองสิ่งนี้:

(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..
person Endoro    schedule 10.07.2013
comment
ใช้งานได้ แต่ดูเหมือนว่าจะลบบรรทัดว่างทั้งหมดออกจากไฟล์ด้วย :( - person MarioVilas; 10.01.2014
comment
@MarioVilas ใช่คุณพูดถูก คุณสามารถใช้ flip สำหรับสิ่งนี้ - person Endoro; 11.01.2014

การสนับสนุนของฉันในการแปลงไฟล์หลายไฟล์ในโฟลเดอร์: for %%z in (*.txt) do (for /f "delims=" %%i in (%%z) do @echo %%i)>%%z.tmp

person Ricardo    schedule 07.11.2013

คุณสามารถสร้างสคริปต์ชุดงานง่ายๆ เพื่อทำสิ่งนี้ให้กับคุณ:

TYPE %1 | MORE /P >%1.1
MOVE %1.1 %1

จากนั้นการรัน <batch script name> <FILE> และ <FILE> จะถูกแปลงเป็นการสิ้นสุดบรรทัด DOS ทันที

person MD XF    schedule 10.05.2017

ฉันโคลนโปรเจ็กต์ git ของฉันโดยใช้ git bash บน windows ไฟล์ทั้งหมดมี LF ตอนจบ พื้นที่เก็บข้อมูลของเรามี CRLF ตอนจบเป็นค่าเริ่มต้น

ฉันลบโปรเจ็กต์แล้วจึงโคลนอีกครั้งโดยใช้ Windows Command Prompt ตอนจบของ CRLF ยังคงเหมือนเดิม ในกรณีของฉัน ถ้าฉันเปลี่ยนตอนจบของโปรเจ็กต์ มันจะส่งผลให้เกิดภาระผูกพันมากมายและจะสร้างปัญหาให้กับเพื่อนร่วมทีมของฉัน เลยทำอย่างนี้ หวังว่านี่จะช่วยใครซักคน

person retr0    schedule 22.08.2018
comment
มีวิธีใช้ git เพื่อแปลง CRLF เป็น LF ฉันเพิ่งใช้วิธีการของคุณเพื่อให้ LF สิ้นสุด แต่ฉันไม่สามารถทำให้มันทำงานได้ ดังนั้นฉันจึงตัดสินใจเปลี่ยนการกำหนดค่า git นี่คือตัวอย่าง: $ git config --global core.autocrlf input - person Ziumper; 30.07.2019

หากคุณมี bash (เช่น git bash) คุณสามารถใช้สคริปต์ต่อไปนี้เพื่อแปลงจาก unix2dos:

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

ในทำนองเดียวกันในการแปลงจาก dos2unix:

ex filename.ext <<EOF
:set fileformat=unix
:wq
EOF
person Stephen Quan    schedule 03.10.2019

ต่อไปนี้เป็นไฟล์ unix2dos.bat ธรรมดาที่รักษาบรรทัดว่างและเครื่องหมายอัศเจรีย์:

@echo off
setlocal DisableDelayedExpansion
for /f "tokens=1,* delims=:" %%k in ('findstr /n "^" %1') do echo.%%l

เอาต์พุตจะเป็นมาตรฐาน ดังนั้นเปลี่ยนเส้นทางเอาต์พุต unix2dos.bat ไปยังไฟล์หากต้องการ

มันหลีกเลี่ยงข้อผิดพลาดของโซลูชันลูปแบทช์อื่นๆ ที่เสนอไว้ก่อนหน้านี้โดย:
1) การทำงานโดยปิดการขยายล่าช้า เพื่อหลีกเลี่ยงการกินเครื่องหมายอัศเจรีย์
2) การใช้โทเค็น for /f เองเพื่อลบบรรทัด number จากบรรทัดเอาต์พุต findstr /n
(จำเป็นต้องใช้ findstr /n เพื่อให้ได้บรรทัดว่างด้วย: บรรทัดเหล่านั้นจะถูกละทิ้งหาก for /f อ่านโดยตรงจากไฟล์อินพุต)

แต่อย่างที่ Jeb ชี้ให้เห็นในความคิดเห็นด้านล่าง วิธีแก้ปัญหาข้างต้นมีข้อเสียเปรียบประการหนึ่งที่วิธีอื่นไม่มี: มันจะลดโคลอนที่จุดเริ่มต้นของบรรทัด

ดังนั้นอัปเดต 04-06-2020 เพื่อความสนุกสนาน นี่คืออีก 1 ซับที่ใช้ findstr.exe ซึ่งดูเหมือนว่าจะทำงานได้ดีโดยไม่มีข้อบกพร่องข้างต้น:

@echo off
setlocal DisableDelayedExpansion
for /f "tokens=* delims=0123456789" %%l in ('findstr /n "^" %1') do echo%%l

เคล็ดลับเพิ่มเติมคือ:
3) ใช้ตัวเลข 0-9 เป็นตัวคั่น เพื่อให้ tokens=* ข้ามหมายเลขบรรทัดเริ่มต้น
4) ใช้เครื่องหมายทวิภาคซึ่งแทรกด้วย findstr /n หลังหมายเลขบรรทัด เป็นตัวคั่นโทเค็นหลัง คำสั่งเสียงก้อง

ฉันจะปล่อยให้ Jeb อธิบายว่ามีกรณีมุมที่ echo:something อาจล้มเหลว :-)
ทั้งหมดที่ฉันสามารถพูดได้ก็คือเวอร์ชันล่าสุดนี้กู้คืนการสิ้นสุดบรรทัดใน batch Library ดังนั้น ถ้ามี ข้อยกเว้นจะต้องค่อนข้างหายาก!

person Jean-François Larvoire    schedule 23.01.2020
comment
สิ่งนี้จะลดโคลอนทั้งหมด : จากจุดเริ่มต้นของบรรทัด นั่นทำลายฟังก์ชันแบตช์ทั้งหมด ยังไงก็ตาม ทดสอบการแปลงไฟล์ด้วยบรรทัดเช่น \..\..\windows\system32\calc.exe หากต้องการแก้ปัญหานี้ โปรดดูที่คำอธิบายนี้ - person jeb; 23.01.2020
comment
คุณถูก! ฉันต้องการทำ 1 ซับใน ง่ายกว่าและดีกว่าโซลูชันที่เผยแพร่ก่อนหน้านี้ แต่เห็นได้ชัดว่าไม่สามารถทำได้ ของคุณเป็นสิ่งเดียวที่ถูกต้องจนถึงตอนนี้ - person Jean-François Larvoire; 07.04.2020
comment
แต่ความท้าทายนั้นไม่อาจต้านทานได้ และบางทีฉันอาจพบวิธีแก้ปัญหา 1 บรรทัดอื่นแล้ว ดังที่แสดงในข้อความแก้ไขด้านบน :-) - person Jean-François Larvoire; 07.04.2020
comment
และคุณล้มเหลวอีกครั้ง :-) ลองกับ ..\..\..\..\..\windows\system32\calc.exe แบบฟอร์ม ปลอดภัย ECHO รูปแบบเดียวคือ echo( ซับเดียวอาจเป็นไปได้ แต่ฉันคิดว่ามันยุ่งยาก - person jeb; 05.10.2020
comment
Caramba, เชินไวเดอร์เวอร์ปาสท์! โอเค ฉันยอมแพ้แล้ว แต่ฉันมั่นใจว่าสักวันฉันจะทำมันได้! :-) - person Jean-François Larvoire; 08.10.2020
comment
ใช่แล้ว Windows ทำสิ่งต่าง ๆ ได้อย่างไร? ฉันไม่สามารถติดตามสิ่งนี้ได้ ฉันไม่เคยคิดว่าส่วนที่ใช้เวลามากที่สุดในการพัฒนามุมมองฐานข้อมูล PHP แบบกำหนดเองทั้งหมดคือการจัดการกับการสิ้นสุดบรรทัดหลังจากคัดลอกโปรเจ็กต์ที่เสร็จแล้วไปยังเซิร์ฟเวอร์ของเรา ไม่มียูทิลิตี้ Windows ใดที่สามารถแก้ไขปัญหาที่พบบ่อยมากนี้ได้โดยไม่ต้องเกาหัวทั้งหมดนี้หรือไม่? - person John Smith; 21.07.2021
comment
อัปเดต: ทำได้ด้วย Notepad++ - person John Smith; 21.07.2021
comment
@John Smith: มีพอร์ตมากมายของโปรแกรม unix2dos และ dos2unix สำหรับ Windows ซึ่งแก้ไขปัญหาเบื้องต้นได้อย่างง่ายดาย ดูคำตอบของ kxr ด้านล่าง stackoverflow.com/a/35661818/2215591 เพื่อดูรายละเอียด ที่นี่ เพื่องานศิลปะโดยเฉพาะ ฉันพยายามสร้างโดยใช้สคริปต์ชุด Windows สั้นๆ นี่เป็นเรื่องยากมากที่จะทำในภาษาสคริปต์ที่ไม่ดีนั้น หากเป็นไปได้ แต่ความยากลำบากนี้เป็นสาเหตุที่ทำให้พวกเราบางคนพบว่ามันเป็นความท้าทายที่สนุกสนาน :-) - person Jean-François Larvoire; 22.07.2021

ตามคำตอบของ 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
person Ir Relevant    schedule 08.08.2014
comment
โซลูชันของ Ir Relevant ทำงานได้ดียกเว้นว่าจะทิ้งเครื่องหมายอัศเจรีย์ (!) ทั้งหมด - person mgcoder; 03.03.2015

ไปงานปาร์ตี้สาย แต่ยังคง ไม่มีคำตอบที่ถูกต้องโดยใช้ FOR /F วนซ้ำ
(แต่คุณไม่จำเป็นต้องวนซ้ำ FOR เลย โซลูชันจาก @TampaHaze ก็ใช้ได้เช่นกันและง่ายกว่ามาก)

คำตอบจาก @IR ที่เกี่ยวข้องมีข้อเสียบางประการ
โดยจะทิ้งเครื่องหมายอัศเจรีย์และยังสามารถทิ้งเครื่องหมายคาเร็ตได้ด้วย

@echo off
(
    setlocal Disabledelayedexpansion
    for /f "tokens=* delims=" %%L in ('findstr /n "^" "%~1"') do (
        set "line=%%L"
        setlocal enabledelayedexpansion
        set "line=!line:*:=!"
        (echo(!line!)
        endlocal
    )
) > file.dos

เคล็ดลับคือการใช้ findstr /n นำหน้าแต่ละบรรทัดด้วย <line number>: ซึ่งจะช่วยหลีกเลี่ยงการข้ามบรรทัดว่างหรือบรรทัดที่ขึ้นต้นด้วย ;
หากต้องการลบ <number>: คุณจะไม่สามารถใช้ตัวเลือก FOR "tokens=1,* delims=:" ได้ เนื่องจากจะเป็นการลบโคลอนนำหน้าทั้งหมดใน เส้นด้วย

ดังนั้น หมายเลขบรรทัดจะถูกลบออกด้วย set "line=!line:*:=!" ซึ่งต้องใช้ EnableDelayedExpansion
แต่ด้วย EnableDelayedExpansion บรรทัด set "line=%%L" จะไม่มีเครื่องหมายอัศเจรีย์และคาเร็ตทั้งหมด (เฉพาะเมื่อมีเครื่องหมายอัศเจรีย์อยู่ในบรรทัดเท่านั้น)

นั่นเป็นเหตุผลที่ฉันปิดการใช้งานส่วนขยายที่ล่าช้าก่อนหน้านี้และเปิดใช้งานเฉพาะสำหรับสองบรรทัดที่จำเป็นเท่านั้น

(echo(!line!) ดูแปลก แต่มีข้อดีตรงที่ echo( สามารถแสดงเนื้อหาใดๆ ใน !line! ได้ และวงเล็บด้านนอกช่วยหลีกเลี่ยงช่องว่างโดยไม่ตั้งใจที่ปลายบรรทัด

person jeb    schedule 23.01.2020

สำหรับการแปลง UNIX(LF) เป็น Windows(CR-LF) ให้ใช้คำสั่งถัดไปบนเทอร์มินัล windows ของคุณ

type file.txt > new_file.txt
person jovib    schedule 04.09.2019

ฉันกำลังเรียนหลักสูตร AWS และต้องคัดลอกจากกล่องข้อความในเว็บฟอร์ม AWS ไปยัง Windows Notepad บ่อยครั้ง ดังนั้นฉันจึงได้รับข้อความที่คั่นด้วย LF บนคลิปบอร์ดของฉันเท่านั้น ฉันบังเอิญค้นพบว่าการวางมันลงในโปรแกรมแก้ไข Delphi ของฉัน จากนั้นกด Ctrl+K+W จะเขียนข้อความลงในไฟล์ที่มีตัวคั่น CR+LF (ฉันพนันได้เลยว่าโปรแกรมแก้ไข IDE อื่น ๆ หลายคนก็คงทำเช่นเดียวกัน)

person RHenningsgard    schedule 12.04.2019

การใส่ Carriage กลับไปยัง ไฟล์ข้อความ

@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
person Jimmy Smith    schedule 10.07.2013
comment
จริงๆ แล้ว มันจะได้ผลถ้าเขาใช้อะไรประมาณนี้ (for /f "tokens=*" %%a in (%~1) do @echo.%%a)>"%~2" - person Ansgar Wiechers; 11.07.2013
comment
@AnsgarWiechers ใช่ set TargetFile=%2 rem c:\test\out.txt นี้จำเป็นต้องปรับปรุงด้วย และอีกอย่าง "tokens=*" ของคุณด้วย - person Endoro; 11.07.2013
comment
@Endoro REM เป็นความคิดเห็นในแบตช์ไฟล์ คุณสามารถนำ %1 rem ออก จากนั้นให้ไฟล์เฉพาะที่คุณต้องการ ขณะที่ฉันให้ลิงก์ ฉันไม่รู้สึกว่าจำเป็นต้องจัดทำเอกสารเพิ่มเติมเนื่องจากคุณกำลังทำงานกับไฟล์แบตช์อยู่แล้วใช่ไหม โปรดทดสอบเมื่อใช้งานได้และสามารถรวมเข้ากับไฟล์แบตช์ที่มีอยู่ได้ตามต้องการ ขอบคุณ! - person Jimmy Smith; 11.07.2013
comment
ทำงานได้ดีสำหรับฉันใน Windows 7 ฉันสร้างไฟล์ c:\test\test.txt ด้วย EOL จาก Unix ใน Notepad++ หลังจากนั้นฉันก็รันไฟล์แบตช์ อีกครั้ง ไม่ใช่รหัสของฉัน มันเป็นรหัสที่ฉันแก้ไขเล็กน้อยเพื่อไม่ให้แสดง Notepad ฉันสามารถแสดง OP ได้ว่าจะต้องทำอย่างไร ซึ่งตรงข้ามกับความคิดเห็นล่าสุดนั้น - person Jimmy Smith; 11.07.2013