Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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 如何在多个txt文件中用单个空格替换多个空格?_Batch File_Cmd - Fatal编程技术网

Batch file 如何在多个txt文件中用单个空格替换多个空格?

Batch file 如何在多个txt文件中用单个空格替换多个空格?,batch-file,cmd,Batch File,Cmd,我发现了如何在一个文件中用单个空间替换多个空间,但我有40个文件要做同样的事情,可以更多,这取决于我的分析 该程序使用不同的列间距保存txt文件 例: 我用过: @ECHO OFF SETLOCAL :: :: delete first line/lines :: and replace each occurrence of 2 or more spaces :: by a delimiter :: DEL output.txt 2>nul /F /Q :: replace with

我发现了如何在一个文件中用单个空间替换多个空间,但我有40个文件要做同样的事情,可以更多,这取决于我的分析

该程序使用不同的列间距保存txt文件

例:

我用过:

@ECHO OFF
SETLOCAL
::
:: delete first line/lines
:: and replace each occurrence of 2 or more spaces
:: by a delimiter
::
DEL output.txt   2>nul /F /Q
:: replace with ->
SET delim= 
:: set number of lines to delete 
FOR /f "skip=1delims=" %%i IN (L1.txt) DO (
SET line=%%i
(SET newline=)
SET count=0
CALL :change
)
GOTO :eof

:CHANGE
SET c1=%line:~0,1%
SET line=%line:~1%
IF "%c1%"==" " (SET /a count+=1) ELSE (
IF %count%==0 (SET newline=%newline%%c1%) ELSE (
IF %count%==1 (SET newline=%newline% %c1%) ELSE (
SET newline=%newline%%delim%%c1%)
SET count=0
)
)
IF DEFINED line GOTO CHANGE
::
:: You may want to preserve trailing spaces
:: or convert them...
::
IF %count%==0 GOTO print
IF %count%==1 SET newline=%newline% &GOTO print
SET newline=%newline%%delim%
:PRINT
>>output.txt ECHO %newline%
GOTO :eof$
在这段代码中,我将输入和输出文件的名称替换了四十次,是否有任何自动替换空格的方法,我不需要在这段代码中手动替换输入和输出文件的名称

有什么想法吗?

你需要两个,一个简单的迭代文件,一个解析内容

这很容易,因为defalt delimiter是空格,连续的分隔符只算作一个,前导的分隔符被忽略。 添加一个eol=*以删除星号行,并保存标记=1-3,中间加逗号,这样您就有了一个完美的.csv文件

将更改的输出分隔符编辑为变量并删除引号

样本输出:

> type sample.csv
Position,Depth,SI
655699.24,65.61,1.00
655559.32,176.41,1.00
655391.55,289.25,1.00
655205.71,428.69,1.00
...snip...

您还可以使用批处理文件中的PowerShell,将多个空格字符的每个系列减少为一个:

@PowerShell-NoP GCI'C:\Users\kvratto\MyFolder'-Fi*.txt | Select-Exp FullName |%{GC$|-Replace'\s+',''SC$|
只需将C:\Users\kvratto\MyFolder调整到包含.txt文件的保留目录

您在什么操作系统上执行此操作,以及您有什么可用的工具?到目前为止您尝试了什么,您遇到了什么困难?请提供一个由你的职位!提示:请看下面的示例。当然,请阅读此处学习…@JeffZeitlin我使用的是Windows 7,但我不知道如何编程C,bat…@aschipfl我添加了更多信息。谢谢!请提供与显示的输入数据相关的示例输出数据…谢谢,它可以工作!如果输出没有引号,会更好,你能改进一下吗?感谢修改Echo=%%A、%%B、%%C命令以满足您的需要。感谢@LotPings!它对我更有效。您节省了我的时间。@kvratto-请选择答案左侧的复选标记,以便让其他人知道这是问题的解决方案。powershell-NoP-C gci*.txt.Fullname比select略短。它是@LotPings,这种格式对我来说一直都很成功,所以我坚持使用它!虽然我想我应该包括非营利组织,我也应该包括done@Compo谢谢你的支持,你的代码和LotPings一样好用。非常感谢各位的关注
:: Q:\Test\2018\06\18\SO_50910509.cmd
@Echo off
Set "Delim=,"
For %%F in (sample*.txt) do (
  ( for /f "eol=*tokens=1-3" %%A in ('type %%F') do @Echo=%%A%Delim%%%B%Delim%%%C
  ) >"%%~nF.csv"
)
> type sample.csv
Position,Depth,SI
655699.24,65.61,1.00
655559.32,176.41,1.00
655391.55,289.25,1.00
655205.71,428.69,1.00
...snip...