Batch file DOS批处理文件只处理第一个文件

Batch file DOS批处理文件只处理第一个文件,batch-file,dos,Batch File,Dos,由于不熟悉DOS,我正在尝试编写一个批处理文件,该文件将名为test1.txt、test2.txt的文件中的所有“|”替换为“,”,并输出到名为test1.csv、test2.csv的文件中。 对于第一个文件,它可以正常工作,但第二个.csv文件保留“|” 这是我的密码: @echo off setlocal enabledelayedexpansion for %%a in (test*.txt) do ( set line=%%a type "!line:|=","!" > %%~n

由于不熟悉DOS,我正在尝试编写一个批处理文件,该文件将名为test1.txt、test2.txt的文件中的所有“|”替换为“,”,并输出到名为test1.csv、test2.csv的文件中。 对于第一个文件,它可以正常工作,但第二个.csv文件保留“|”

这是我的密码:

@echo off
setlocal enabledelayedexpansion

for %%a in (test*.txt) do (
set line=%%a
type "!line:|=","!" > %%~na.csv
)
我读过一篇文章,其中提到“line”变量在解析一次块后可能会更改,但我不知道如何解决这个问题(我尝试了一些修改,比如在“type”之前进行“call”,但仍然是一样的)

任何帮助都会很好。
谢谢

编辑:这些在这里起作用

@echo off
setlocal enabledelayedexpansion
for %%a in (test*.txt) do (
  for /f "delims=" %%b in ('type "%%a" ') do (
   set "line=%%b"
   set "line=!line:|=,!"
   >> "%%~na.csv" echo !line!
  )
)
使用名为repl.bat from的帮助程序批处理文件-这将保留空行并更可靠

@echo off
for %%a in (test*.txt) do type "%%a" | repl "\|" "," m > "%%~na.csv"

编辑:这些在这里工作

@echo off
setlocal enabledelayedexpansion
for %%a in (test*.txt) do (
  for /f "delims=" %%b in ('type "%%a" ') do (
   set "line=%%b"
   set "line=!line:|=,!"
   >> "%%~na.csv" echo !line!
  )
)
使用名为repl.bat from的帮助程序批处理文件-这将保留空行并更可靠

@echo off
for %%a in (test*.txt) do type "%%a" | repl "\|" "," m > "%%~na.csv"

只处理test1.txt的第一行,并将test1.txt的第二行放入第二个输出文件中。2.csv文件的名称也分别与test1.txt的第一行和第二行混淆。同样,在您的第二个代码中,只生成test1.csv,但它是空的。第二个工作正常-它需要帮助程序批处理文件。我修复了第一个代码,因为我重新使用了%%a。谢谢。我尝试用其他字符替换,但我注意到它不适用于制表符“\t”。你知道为什么吗?因为
/t
并不像你想象的那样被翻译成。只要按一下键就行了。当然,您需要一个编辑器,它不会转换带有一些空格的选项卡。(Notepad.exe可以正常工作)只处理test1.txt的第一行,并将test1.txt的第二行放在第二个输出文件中。2.csv文件的名称也分别与test1.txt的第一行和第二行混淆。同样,在您的第二个代码中,只生成test1.csv,但它是空的。第二个工作正常-它需要帮助程序批处理文件。我修复了第一个代码,因为我重新使用了%%a。谢谢。我尝试用其他字符替换,但我注意到它不适用于制表符“\t”。你知道为什么吗?因为
/t
并不像你想象的那样被翻译成。只要按一下键就行了。当然,您需要一个编辑器,它不会转换带有一些空格的选项卡。(Notepad.exe可以正常工作)