将文件名插入多个子文件夹中的文件的批处理脚本

时间:2014-08-27 07:53:54

标签: batch-file csv

我需要帮助创建一个批处理脚本,该脚本将文件名添加到所有子文件夹中每个.csv的第一行。批处理文件将位于主文件夹中。同一文件夹将包含多个子文件夹,每个子文件夹包含大量.csv文件。我需要将文件保留在各自的文件夹中。我的目标是将其添加到另一个工作脚本中,该脚本将子文件夹中的所有文件合并为一个.csv。这将提供一种浏览合并文件的方法。我发现了一些类似的帖子,但它们并不是我想要的。这是我能找到的最接近的东西,但是分隔符会让我失去Batch file to Write Filename to first line

File Structure Example:
C:\MainFolder\batch_script.bat
C:\MainFolder\SubFolder1\csv1.csv
C:\MainFolder\SubFolder1\csv2.csv
C:\MainFolder\SubFolder2\csv3.csv
C:\MainFolder\SubFolder2\csv4.csv

运行脚本之前的文件内容

csv1.csv:
This is the content of csv1.csv

csv2.csv:
This is the content of csv2.csv

csv3.csv:
This is the content of csv3.csv

csv4.csv:
This is the content of csv4.csv

运行脚本后的文件内容:

csv1.csv:
csv1.csv
This is the content of csv1.csv

csv2.csv:
csv2.csv
This is the content of csv2.csv

csv3.csv:
csv3.csv
This is the content of csv3.csv

csv4.csv:
csv4.csv
This is the content of csv4.csv

P.S。 我也在另一个网站上发现了这个代码,但我不确定如何让它循环遍历不同的子文件夹

FOR /F "usebackq tokens=1" %%i IN (`DIR /B`) DO (
ECHO %%i >> %1
TYPE %%i >> %1  
)

3 个答案:

答案 0 :(得分:0)

试试这个:

for /r %%a in (*.csv) do (
copy /y "%%~a" "%temp%\%%~na"
Echo %%~na > "%%~a"
for /f "usebackq" %%b in ("%temp%\%%~na") do Echo %%b >> "%%~a"
del "%temp%\%%~na"
)

这应该做你想要的。如果可以的话,我会先测试一下。

答案 1 :(得分:0)

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /r %%a in (*.csv) do (
        set /p "firstLine=" < "%%~fa"
        setlocal enabledelayedexpansion
        for /f "delims=" %%b in (".!firstLine!") do endlocal & if not "%%~b"==".%%~nxa" (
            (   echo %%~nxa
                type "%%~fa"
            ) > "%%~fa.new" 
            move /y "%%~fa.new" "%%~fa" >nul
        )
    )

它的作用是生成一个名为csv作为第一行的新文件,将csv附加到新文件并将新文件移到csv上。在此过程中,它会测试第一行的内容是否与csv的名称相同,以避免在每次运行批处理文件时重新包含文件名。

已编辑以适应评论 - 由于该过程不会针对csv文件集运行多次,因此完整代码可以缩减为

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /r %%a in (*.csv) do (
        (   echo %%~nxa
            type "%%~fa"
        ) > "%%~fa.new" 
        move /y "%%~fa.new" "%%~fa" >nul
    )

答案 2 :(得分:0)

这应该在all.csv下的树中的每个文件夹中创建C:\MainFolder,并在每个filename文件的内容之前添加CSV

文件名将包含完整路径,但如果需要,可以轻松更改。

@echo off
for /d /r "C:\MainFolder\" %%a in (*) do (
   pushd "%%a"
      (for %%b in (*.csv) do (
         echo %%b
         type "%%b"
         )
       )>all.tmp
      ren all.tmp all.csv
   popd
)
pause