通过cmd更改下线字符

通过cmd更改下线字符,cmd,eol,Cmd,Eol,我在unix eol中有一个文件file1, 我有一个脚本可以在其中进行一些编辑,但是编辑是在output.txt中完成的,并被重命名为file1,这将eol更改为windows/dos 给出了代码 set uu=file1 set vv=file2 setlocal EnableDelayedExpansion (for /F "delims=" %%a in (%uu%) do ( set "line=%%a" if "!line:345=!" neq "!line!" (

我在unix eol中有一个文件
file1
, 我有一个脚本可以在其中进行一些编辑,但是编辑是在
output.txt
中完成的,并被重命名为
file1
,这将eol更改为windows/dos

给出了代码

set uu=file1
set vv=file2

setlocal EnableDelayedExpansion
(for /F "delims=" %%a in (%uu%) do (
   set "line=%%a"
   if "!line:345=!" neq "!line!" (
      if "!line:123=!" neq "!line!" (
         if not defined flag (
            findstr "123" %vv% | findstr "345"
            set flag=true
         )
      ) else (
         echo !line!
      )
   ) else (
      echo !line!
   )
)) >output.txt 
del %uu% 
rename output.txt file1
有没有办法在没有用户输入的情况下通过cmd将其更改回或保留unix eol

已尝试直接输入文件1,给出一个0 kb的文件 已尝试
键入output.txt>文件1
给出dos/win eol 回显除空行以外的任何内容
echo.>file1
更改了下线字符

以下是一个解决方案:

@echo off
::Syntax: batchfile "file.txt" >"file2.txt"

:init
for /f %%c in ('copy /z "%~dpnx0" nul') do set cr=%%c
(set lf=^

)
del file.tmp 2>nul
for /f "delims=" %%i in ('findstr /n "^" "%~1"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:*:=!!lf!"
echo(!line!
endlocal
)>>file.tmp
setlocal enabledelayedexpansion
findstr /v "!cr!!lf!" file.tmp
endlocal
del file.tmp 2>nul
这里有一个解决方案:

@echo off
::Syntax: batchfile "file.txt" >"file2.txt"

:init
for /f %%c in ('copy /z "%~dpnx0" nul') do set cr=%%c
(set lf=^

)
del file.tmp 2>nul
for /f "delims=" %%i in ('findstr /n "^" "%~1"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:*:=!!lf!"
echo(!line!
endlocal
)>>file.tmp
setlocal enabledelayedexpansion
findstr /v "!cr!!lf!" file.tmp
endlocal
del file.tmp 2>nul

使用纯
CMD
我会说不太可能

gnused
应该能够进行这种转换

sed -b s/\r//g infile >outfile

使用纯
CMD
我会说不太可能

gnused
应该能够进行这种转换

sed -b s/\r//g infile >outfile
试试这个:

@echo off&setlocal enabledelayedexpansion
set "uu=file1"
set "vv=file2"
set LF=^


rem keep two empty lines between set LF and here
setlocal EnableDelayedExpansion
(for /F "delims=" %%a in (%uu%) do (
   set "line=%%a"
   if "!line:345=!" neq "!line!" (
      if "!line:123=!" neq "!line!" (
         if not defined flag (
            findstr "123" %vv% | findstr "345"
            set flag=true
         )
      ) else (
         <nul set/p"=!line!!LF!"
      )
   ) else (
      <nul set/p"=!line!!LF!"
   )
)) >output.txt 
type output.txt
@echo off&setlocal enabledelayedexpansion
设置“uu=file1”
设置“vv=file2”
设置LF=^
rem在set LF和here之间保留两条空行
setlocal EnableDelayedExpansion
(对于/F“delims=“%a in(%uu%)do(
设置“行=%%a”
如果“!line:345=!“neq”!line!”(
如果“!line:123=!“neq”!line!”(
如果未定义标志(
findstr“123”%vv%| findstr“345”
设置标志=真
)
)否则(
试试这个:

@echo off&setlocal enabledelayedexpansion
set "uu=file1"
set "vv=file2"
set LF=^


rem keep two empty lines between set LF and here
setlocal EnableDelayedExpansion
(for /F "delims=" %%a in (%uu%) do (
   set "line=%%a"
   if "!line:345=!" neq "!line!" (
      if "!line:123=!" neq "!line!" (
         if not defined flag (
            findstr "123" %vv% | findstr "345"
            set flag=true
         )
      ) else (
         <nul set/p"=!line!!LF!"
      )
   ) else (
      <nul set/p"=!line!!LF!"
   )
)) >output.txt 
type output.txt
@echo off&setlocal enabledelayedexpansion
设置“uu=file1”
设置“vv=file2”
设置LF=^
rem在set LF和here之间保留两条空行
setlocal EnableDelayedExpansion
(对于/F“delims=“%a in(%uu%)do(
设置“行=%%a”
如果“!line:345=!“neq”!line!”(
如果“!line:123=!“neq”!line!”(
如果未定义标志(
findstr“123”%vv%| findstr“345”
设置标志=真
)
)否则(


你用的是什么语言?你说的“unix”的eol是什么意思(例如,仅限CR,CRLFCR)?使用批处理脚本。@恩多,我真的不知道,直到现在我才用记事本+,并将eol转换从windows/dos改为unix/osx格式。试过wiki,它说LF这是windows eol``你用的是什么语言?你说“unix”的eol是什么意思(例如仅限CR,CRLFCR)?使用批处理脚本。@恩多,我不太清楚,直到现在我才使用记事本++并将EOL转换从windows/dos更改为unix/osx格式。尝试过wiki,它说LFthis is windows EOL``aa无法运行,因为我有64位:(我编辑了上面的帖子。我的原文如下:Horst Schaeffer写了
CRLF.COM
,如果你有
32位的windows
,它有一些智能。你能解释一下它的工作原理吗?顺便说一句,我点击了show symbols,lf变量被设置为CRLF而不是LFyes,我也不知道在哪里替换文件名?所以rry如果我是noobi如果你调用批处理文件dos2unix.bat,那么命令将是
dos2unix“filein.txt”>“fileout.txt”
aa,它无法运行,因为我有64位:(我编辑了上面的帖子。我的原文如下:Horst Schaeffer写了
CRLF.COM
,如果你有
32位的windows
,它有一些智能。你能解释一下它的工作原理吗?顺便说一句,我点击了show symbols,lf变量被设置为CRLF而不是LFyes,我也不知道在哪里替换文件名?所以rry如果我的名字是noobi,那么如果你调用批处理文件dos2unix.bat,那么命令将是
dos2unix“filein.txt”>“fileout.txt”
gnu sed是不可移植的,是吗?如果没有任何可移植的解决方案?复制了同一行,但eol没有更改。使用VBS不能这样做。VBS应该能够打开文件并用LF写入行,否则就没有行结尾。嗯-修订的命令对我有效。你说的“可移植”是什么意思?这是一个免费提供的实用程序。
GNU-SED
是DOS风格。Ux有自己的版本。您针对哪些平台可能运行CMD,而
GNU-SED
可以运行?GNU-SED是不可移植的,是吗?如果没有任何可移植的解决方案?复制了同一行,但eol没有更改。GNU-SED不能运行。VBS应该可以打开一个文件,用LF写行,否则就没有行尾了。嗯,修改过的命令对我有用。你说的“可移植”是什么意思?这是一个免费提供的实用程序。
GNU-SED
是DOS风格。Ux有自己的版本。您针对哪些平台运行CMD,而
GNU-SED
可以运行?不,仍然是DOS格式。当我单击show eol char时,它显示set lf=^CRLF而不是lf。即使尝试使用unix格式使其成为lf,也不起作用所有行的末尾都只获取
LF
,请使用十六进制编辑器查看内部。请注意这两个空行,如果它们不为空,则这不起作用。不,仍然是dos格式。当我单击show eol char时,它显示set LF=^CRLF not LF。即使尝试使用unix格式将其设为LF,也不起作用。所有行的末尾都仅获取
LF
,使用十六进制编辑器查看内部。请注意这两个空行,如果它们不是空的,则这不起作用。