我已经找到了Windows批处理脚本,它将结合所有子目录中的csv文件。它在Windows 10中很好用,但是当我在Windows 7中运行脚本时,所有文件都乱了。如何强制组合csv文件的顺序?
df['RUL'] = df.loc[:, ['engine', 'cycle']].groupby('engine').transform('max')
df['RUL'] = df['RUL'] - df['cycle']
答案 0 :(得分:2)
只需对代码稍作更改即可完成工作:
@echo off
FOR /F "usebackq delims=" %%i IN (`dir /s /b /O:N *.csv`) do (
if not "%%~nxi" == "output.csv" (
echo %%~nxi >> output.csv
echo %%i
echo %%~nxi
type "%%i" >> output.csv
echo. >> output.csv
echo. >> output.csv
)
)
重点是使用其他命令-使用 dir 控制排序顺序。
/b
用于dir
的干净输出
/O
用于订购,N-名称。
检查FOR /?
和dir /?
了解更多详细信息。
PS:您可能想使用:
echo %%~dpnxi >> output.csv
代替第4行的echo %%~nxi >> output.csv
,以显示output.csv中每个文件的完整路径。
答案 1 :(得分:1)
这只是对POW's answer的略微修改,可以为您带来更好的性能。此技术使文件保持打开状态以进行写入。当您多次使用追加时,它将打开和关闭输出文件。因此,文件指针每次输出到文件时都必须重置。
@echo off
(FOR /F "usebackq delims=" %%i IN (`dir /s /b /O:N *.csv`) do (
echo %%~nxi
echo %%i >con
type "%%i"
echo.
echo.
)
)>output.tmp
rename output.tmp output.csv
答案 2 :(得分:0)
这是另一种可能的解决方案:
@echo off
for /R %%A IN (*.csv) do (
if not "%%~nxA"=="output.csv" (
(echo %%~fA && type "%%~fA" && echo. && echo.)>>output.csv
echo Processed: %%A
echo %%~nxA
)
)
使用更少的代码。
/R
选项与for
一起使用来遍历%cd%
中的子文件夹。csv
个文件,因此,我们在括号中用(*.csv)
指定它。
csv
文件是否为output.csv
。
csv
("%%~fA"
)文件的完整路径,其内容(type "..."
)和两个换行符(echo.
到output.csv
。此条件不是真正必需的,但已成为问题的主题。 此外,如果您不想将完整路径附加到output.csv
,但是文件名和扩展名仅 ,只需将%%~fA
替换为{ {1}}。 %%~nxA
,则我们重复循环。output.csv
在所有子目录中具有所有 output.csv
个文件的内容。因此,现在打开一个新的cmd并键入以下命令。仔细阅读输出:
csv
for /?
if /?
echo /?
一些建议供进一步阅读:
答案 3 :(得分:0)
感谢大家的帮助。阅读所有响应后,我意识到我可以解决Windows排序问题,方法是将其排序到另一个文件,然后从那里读取它。
dir /b /s /O:N *.csv | sort > file.txt
for /f %%A IN (file.txt) do (
if not %%~nxA == output.csv (
echo %%~dpnxA
echo %%~nxA >> output.csv
type %%A >> output.csv
echo. >> output.csv
echo. >> output.csv
)
)
再次感谢您的所有帮助。