2014-10-01 58 views
0

我有很多CSV。我想合并成一个大的,进一步的文件,我还需要保持文件名中的列2将CSV文件合并为一个主文件并将文件名保留在列2中

我的CSV文件的内容

文件名ABNK102455

Column A 
12/215425 
12/125485 
12/215435 

文件名ABNK102456

Column A 
12/215425 
12/125485 
12/215435 

结果

Combined.CSV

Column A 
12/215425 ABNK102455 
12/125485 ABNK102455 
12/215435 ABNK102455 
12/215425 ABNK102456 
12/125485 ABNK102456 
12/215435 ABNK102456 

这是可能的,以及如何?

回答

2
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "mask=q*.csv" 
SET "headerlinegenerated=" 
(
FOR /f "delims=" %%a IN ('dir /a-d /b "%sourcedir%\%mask%"') DO (
    SET "headerline=" 
    FOR /f "usebackqdelims=" %%m IN ("%sourcedir%\%%~nxa") DO (
    IF NOT DEFINED headerlinegenerated SET "headerlinegenerated=Y"&ECHO %%m 
    IF DEFINED headerline ECHO %%m %%~na 
    SET headerline=Y 
) 
) 
)>newfile.txt 
GOTO :EOF 

你需要改变的sourcedir设置,以满足您的具体情况。

我使用了一个名为q26135599-1.csvq26135599-2.csv的文件,其中包含我的测试数据。您需要调整mask的设置以适应。

主要生产newfile.txt

最好不要尝试在源目录中创建newfile.txt.csv,除非你真的相信它不会被列入%mask%

+0

好方法在命令行上执行它......没有想到那个... +1 – MikeD 2014-10-01 07:39:51

+0

Hi @ Magoo,非常感谢你的帮助,我将如何运行?看着这在CMD中完成,我对DOS不太好。 – user3906930 2014-10-01 10:12:36

+0

复制并粘贴到'filenameofyourchoosing.bat'。然后只需从'cmd'提示符下运行'filenameofyourchoosing'。如果你将'.bat'存储在''path''中,那么从哪个目录运行它并不重要。或者,您可以为'.bat'文件建立一个“快捷方式”,并通过点击它从桌面运行它。 – Magoo 2014-10-01 10:47:25

0

,让你去....

Sub Test() 
Dim Idx As Long 
Dim RowNum As Long 
Dim TargetRange As Range 
Dim FileName As String 

    RowNum = 1 
    Set TargetRange = ActiveSheet.[A1] 

    ' File selection loop 
    With Application.FileDialog(msoFileDialogFilePicker) 
     .AllowMultiSelect = True 
     ' use .Filters.Add ... to present only .txt, .csv files etc. 
     .Show 

     ' File processing loop 
     For Idx = 1 To .SelectedItems.Count 

      ' here you get each file name inc. full path ... one by one 
      FileName = .SelectedItems(Idx) 

      ' isolate filename 
      ' open file 

      ' while not end of file 
      '  read from file line by line into a string variable 
      '  place string into TargetRange(RowNum, 1) 
      '  place filename into TargetRange(RowNum, 2) 
      '  increment RowNuM 

     Next Idx 
    End With 
End Sub 
+0

嗨@MikeD,谢谢你这个VB代码,也会看看我是否可以得到这个 – user3906930 2014-10-01 10:39:54

相关问题