批处理文件从子目录复制文本文件然后将它们合并在一起

时间:2014-01-23 17:44:24

标签: batch-file copy batch-rename

我正在尝试对来自不同目录的txt文件进行大规模合并。

所以我有

C:/ data / Folder 1 / Test.txt
c:/ data / Folder 2 / Test.txt
C:/data/folder2/testfolder/test.txt

现在我的问题是能够在重命名时将它们全部移动到一个目录中,不幸的是它们都具有相同的名称,然后将它们合并在一起。

到目前为止我可以解决的问题,

我可以使用以下内容将它们全部移动到一个目录

For /r c:/data %F in (*.txt) do copy %f C:/exporteddata 

将从数据目录中获取所有文本文件并将它们放入exporteddata目录,但只有在每个文件名都是唯一的时才有效,在我的例子中它们都是同名的

我知道,一旦我将所有.txt文件放在同一目录中,我就可以使用

copy *.txt output.txt 

在导出的数据目录中运行

但是我无法解决的问题是如何进行重命名,这会在复制之前为所有txt文件提供唯一的ID。

任何帮助都会很棒。

非常感谢

2 个答案:

答案 0 :(得分:0)

您实际上可以将所有文件复制到一个文件,而无需移动到新位置。 您可以选择在所需命令之前通过removin echo复制和连接所有文件。我设置将所有文件复制到新目录“AllFilesFolder”。请将脚本放在基础目录中。 另外 - 为了避免名称整理(将同名文件复制到AllFilesFolder),会在复制文件名时添加一个id。每个文件都会增加id。

@echo off
setlocal enabledelayedexpansion

set id=0
if not exist AllFilesFolder mkdir AllFilesFolder

for /f %%a in ('dir /B /S /A-D *.txt') do (
    echo copy "%%a" "AllFilesFolder\%%~dpna_!id!%%~xa"
    echo type "%%a" >> allFiles.txt
    set /a id+=1
)

答案 1 :(得分:0)

此cmd提示行将合并您的文件。

For /r "c:\data" %f in (*.txt) do type "%f" >> C:\exporteddata 

%加倍到%%以便在批处理文件中使用。