Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 从一个文件读取到另一个文件时保持空白行不变_Batch File_Command - Fatal编程技术网

Batch file 从一个文件读取到另一个文件时保持空白行不变

Batch file 从一个文件读取到另一个文件时保持空白行不变,batch-file,command,Batch File,Command,我正在使用下面的代码(批处理文件)逐行从属性文件读取到另一个文件。问题是它正在从源文件中删除所有空白行。为了使空行可用于目标文件,我应该做哪些更改 FOR /F "USEBACKQ tokens=*" %%A IN (`FIND /V "" ^<"%FILE%.SRC"`) DO ( ECHO %%A>>"%FILE%" ) FOR/F“USEBACKQ令牌=*”%%A IN(`FIND/V”“^>%FILE%” ) FOR/F将始终跳过空行,因此您必须避免空行 这可以通

我正在使用下面的代码(批处理文件)逐行从属性文件读取到另一个文件。问题是它正在从源文件中删除所有空白行。为了使空行可用于目标文件,我应该做哪些更改

FOR /F "USEBACKQ tokens=*" %%A IN (`FIND /V "" ^<"%FILE%.SRC"`) DO (
  ECHO %%A>>"%FILE%"
)
FOR/F“USEBACKQ令牌=*”%%A IN(`FIND/V”“^>%FILE%”
)

FOR/F将始终跳过空行,因此您必须避免空行

这可以通过使用findstr或find在行号前加上行号来解决

然后您只需要删除行号

(
  setlocal DisableDelayedExpansion
  for /F "delims=" %%L in ('findstr /n "^" "%FILE%.src"') do (
    set "line=%%L"
    setlocal EnableDelayedExpansion
    set "line=!line:*:=!"
    echo(!line!
    endlocal
  )
) > "%FILE%"
切换延迟扩展模式是必要的,因为您需要延迟扩展以删除行号直至第一个冒号。
但需要禁用扩展才能将%%L传输到行变量,否则会破坏感叹号,有时还会破坏插入符号


读取文件的
set/p
技术是另一种方法,在

FOR/F中描述的方法将始终跳过空行,因此您必须避免空行

这可以通过使用findstr或find在行号前加上行号来解决

然后您只需要删除行号

(
  setlocal DisableDelayedExpansion
  for /F "delims=" %%L in ('findstr /n "^" "%FILE%.src"') do (
    set "line=%%L"
    setlocal EnableDelayedExpansion
    set "line=!line:*:=!"
    echo(!line!
    endlocal
  )
) > "%FILE%"
切换延迟扩展模式是必要的,因为您需要延迟扩展以删除行号直至第一个冒号。
但需要禁用扩展才能将%%L传输到行变量,否则会破坏感叹号,有时还会破坏插入符号

读取文件的
set/p
技术是另一种方法,如中所述

这将从:text_Start到:text_End之间读取.bat文件中的文本,并将不带标签的文本(:text_Start和:text_End)打印到file.txt中,然后在:text_End之后继续执行代码。它将保留空白行和变量,任何方式都不会展开,注释将按原样打印。如果需要子目录或任何其他目录中的File.txt,可以直接应用路径或使用某些%path%变量。这将在Windows7上运行,可能或多或少。要使用其他输入文件从%f0读取行,请使用有效的文件路径替换%f0,并根据需要调整:TEXT_开始和:TEXT_结束标签。如果需要替换文本,可以根据需要调整行“set”OUTPUT=!OUTPUT:ReplaceSomeText=和someOtherTextifyouned!”,并以相同方式在行“set”OUTPUT=!OUTPUT::=!”之前添加更多替换“过滤器”。如果在此类替换筛选器中使用特殊字符,则可能必须通过将特殊字符od加倍,并在其前面加上^来对其进行转义

编辑:添加了过滤功能以明确在哪里可以替换文本

这将从:text_Start到:text_End之间读取.bat文件中的文本,并将不带标签的文本(:text_Start和:text_End)打印到file.txt中,然后在:text_End之后继续执行代码。它将保留空白行和变量,任何方式都不会展开,注释将按原样打印。如果需要子目录或任何其他目录中的File.txt,可以直接应用路径或使用某些%path%变量。这将在Windows7上运行,可能或多或少。要使用其他输入文件从%f0读取行,请使用有效的文件路径替换%f0,并根据需要调整:TEXT_开始和:TEXT_结束标签。如果需要替换文本,可以根据需要调整行“set”OUTPUT=!OUTPUT:ReplaceSomeText=和someOtherTextifyouned!”,并以相同方式在行“set”OUTPUT=!OUTPUT::=!”之前添加更多替换“过滤器”。如果在此类替换筛选器中使用特殊字符,则可能必须通过将特殊字符od加倍,并在其前面加上^来对其进行转义


编辑:添加了过滤功能以明确在何处可以替换文本。

是否有类似于对for循环应用某些[选项]的操作将覆盖此默认行为(跳过空行)。@TapasJena否,否则不需要构建此类解决方案64介绍了基本原理,但高级问题有时有点不清楚there@jed....I我是一个新的批脚本和使用脚本从下面的文章。您能否建议在该脚本中需要进行哪些更改以实现这一点@TapasJena您应该打开一个新问题或编辑您的问题(如果没有不同),是否有任何类似于简单地将某些[选项]应用于for循环将覆盖此默认行为(跳过空行)。@TapasJena否,否则就没有必要构建这样的解决方案64介绍了基本原理,但高级问题有时有点不清楚there@jed....I我是一个新的批脚本和使用脚本从下面的文章。您能否建议在该脚本中需要进行哪些更改以实现这一点@TapasJena您应该打开一个新问题或编辑您的问题(如果没有不同)