it-swarm.asia

ويندوز القيادة لتحويل نهايات خط يونيكس؟

هل هناك أمر ويندوز لتحويل نهايات سطر من ملف؟

لدينا test.bat الذي نحتاج إلى تشغيله لبدء تشغيل خادمنا. نستخدم Perforce ونحتاج إلى نهايات خطوط يونيكس في مساحة العمل لدينا. لسبب ما ، لا يُسمح لنا بتغيير نهايات الخطوط إلى Windows في مساحات العمل لدينا. ومع ذلك ، يعمل الخادم على ويندوز.

في كل مرة يجب علي تشغيل ملف الخفافيش ، أفتحه في Notepad ++ واختر تحرير → تحويل EOL → Windows. هل هناك طريقة لأتمتة هذا حتى لا نحتاج إلى تغيير نهايات الخطوط يدويًا في كل مرة نتزامن فيها مع Perforce؟

شكرا لك مقدما.

61
Deepti Jain

يمكن القيام بذلك بسهولة بالغة باستخدام الأمر more الذي تم تضمينه في نظام التشغيل Windows NT والإصدارات الأحدث. لتحويل input_filename الذي يحتوي على UNIX EOL (نهاية السطر) \n إلى output_filename الذي يحتوي على Windows EOL \r\n ، فقط قم بما يلي:

TYPE input_filename | MORE /P > output_filename

يحتوي الأمر more على خيارات تنسيق إضافية قد لا تكون على دراية بها. قم بتشغيل more/? للتعرف على ما يمكن أن يفعله more.

55
TampaHaze

استخدام unix2dos الأداة. يمكنك تنزيل الثنائيات هنا .

26
David Jashi

يمكنك القيام بذلك دون أدوات إضافية في 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) قبل كتابتها إلى ملف.

15
Ansgar Wiechers

لا يمكن الاعتماد على Windows 'MORE ، فهو يدمر TABs بشكل حتمي ويضيف خطوطًا.

unix2dos جزء أيضًا من MinGW/MSYS و Cygutils و GnuWin32 ومجموعات المنافذ الثنائية الأخرى - وقد يكون مثبتًا بالفعل.

عندما يكون 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 وعلى المسار وفقًا للنظام الأساسي الخاص بك:

@REM This is any2here.bat
python -c "import sys; sys.stdout.write(open(sys.argv[1]).read())" %1

واستخدام هذه الأداة مثل

any2here UNIXFILE.EXT > MYPLATFILE.EXT
10
kxr

كنت أتعامل مع مشكلات CRLF لذلك قررت إنشاء أداة بسيطة حقًا للتحويل (في NodeJS):

It's NodeJS EOL Converter CLI

لذلك إذا كان لديك NodeJS مع npm / يمكنك تجربته:

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

قد يتم تكوين المسار ديناميكيًا باستخدام Glob regex (نفس regex كما في Shell).

لذلك إذا كنت تستطيع استخدام NodeJS ، فهذا أمر بسيط للغاية ويمكنك دمج هذا الأمر لتحويل مساحة العمل بأكملها إلى نهايات الخطوط المرغوبة.

8
Jurosh

بناء على إجابات مفيدة من TampaHaze و MD XF.

سيؤدي ذلك إلى تغيير جميع ملفات .txt في المكان في الدليل الحالي من LF إلى CRLF في موجه الأوامر

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

إذا كنت لا تريد التحقق من كل تغيير واحد

نقل

إلى

نقل/ذ

لتضمين الدلائل الفرعية التغيير

دير/ب

إلى

دير/ب/ث

للقيام بكل هذا في ملف دفعي بما في ذلك الدلائل الفرعية دون المطالبة باستخدام أدناه

@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
6
uosjead

جرب هذا:

(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 31 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 ="٪ أنا في (file.unix) أفعل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 .. 
5
Endoro

مساهمتي في هذا ، تحويل عدة ملفات في مجلد: for %%z in (*.txt) do (for /f "delims=" %%i in (%%z) do @echo %%i)>%%z.tmp

3
Ricardo

يمكنك إنشاء برنامج نصي دفعي بسيط للقيام بذلك نيابة عنك:

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

ثم قم بتشغيل <batch script name> <FILE> وسيتم تحويل <FILE> على الفور إلى نهايات خطوط DOS.

1
MD XF

استنادًا إلى إجابة 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
1
Ir Relevant

لقد استنسخت مشروع git الخاص بي باستخدام git bash في windows. جميع الملفات ثم نهايات LF. يحتوي مستودعنا على CRLF نهايات افتراضية.

لقد حذفت المشروع ، ثم استنسخته مرة أخرى باستخدام Windows Command Prompt. النهايات CRLF كانت سليمة بعد ذلك. في حالتي ، إذا كنت قد غيرت نهايات المشروع ، فسينتج عن ذلك التزام كبير وتسبب في مشكلة لزملائي في الفريق. لذلك ، فعلت هذا بهذه الطريقة. آمل أن يكون هذا يساعد شخص ما.

0
retr0

أقوم بدورة تدريبية في AWS ، وكان عليّ نسخها بشكل متكرر من مربعات النص في نماذج الويب AWS إلى Windows Notepad. حتى أحصل على نص محدد LF فقط على الحافظة الخاصة بي. لقد اكتشفت بالصدفة أن لصقها في محرر دلفي الخاص بي ، ثم الضغط على Ctrl + K + W سيكتب النص إلى ملف مع محددات CR + LF. (سأراهن أن العديد من المحررين الآخرين -IDE سيفعلون نفس الشيء).

0
RHenningsgard