我想解析一个目录及其子目录,并复制目标目录中的所有文件,而忽略原始文件夹结构。所有文件都应直接复制到目标目录中。
我在Windows命令行找到了一个很好的解决方案:
for /r FolderA %f in (*) do @copy "%f" target
https://stackoverflow.com/a/1502183/772434
这一般工作正常,但我在源目录中有相同名称的重复文件。文件太多,所以我无法手工处理这些例外。
如何自动处理脚本中的这些文件? 选项:
我会更喜欢选项3(比较文件内容并仅在文件真的不同时保留编号副本),但我也对选项1和2的解决方案感兴趣(更实用)。 / p>
答案 0 :(得分:1)
这是一种方法。我还没有对它进行测试,所以我希望它按预期工作。
有一个名为CURRENT_DUPLICATE_SUFFIX
的全局变量。每次找到具有相同名称的文件但内容不同时,此值会递增并附加到生成的文件名
@echo off
SET SOURCE_DIR=C:\temp\LogAnalyzer
SET TARGET_DIR=C:\temp\test\output
SET CURRENT_DUPLICATE_SUFFIX=1
for /r "%SOURCE_DIR%" %%f in (*) do CALL :SUB1 "%%f"
GOTO END
:SUB1
SET PURE_FILE_NAME=%~nx1
SET TARGET_FILE_NAME=%TARGET_DIR%\%PURE_FILE_NAME%
IF NOT EXIST "%TARGET_FILE_NAME%" (
COPY %1 "%TARGET_DIR%"
GOTO :EOF
)
REM if we are here, the target file exists.
echo n |comp %1 "%TARGET_FILE_NAME%" >NUL 2>NUL
REM in case the files have the same content
IF %ERRORLEVEL%==0 GOTO :EOF
SET TARGET_FILE_NAME=%TARGET_FILE_NAME%_%CURRENT_DUPLICATE_SUFFIX%
SET /A CURRENT_DUPLICATE_SUFFIX=%CURRENT_DUPLICATE_SUFFIX%+1
COPY %1 "%TARGET_FILE_NAME%
GOTO :EOF
:END