您好我正在尝试使用批处理文件将所有文本文件从目录复制到另一个目录。如果目录包含任何子文件夹,程序还必须解析子文件夹并从文件夹和子文件夹中复制文本文件。如果文件在目标文件夹中具有相同的名称(dTarget
),请在复制前重命名该文件
以下是使用的代码
@echo off &setlocal
set "dSource=c:\test\a"
set "dTarget=c:\test\op"
set "fType=*.txt"
for %%i in ("%dSource%\%fType%") do if not exist "%dtarget%\%%~nxi" (copy /b "%%~i" "%dtarget%") else call :process "%%~i"
goto :eof
:process
set /a cnt=-1
:loop
set /a cnt+=1
set "fname=%dtarget%\%~n1(%cnt%)%~x1"
if exist "%fname%" goto :loop
copy /b "%~1" "%fname%"
goto :eof
endlocal
如果没有子目录,这个程序工作正常,我试图使用/R
但没有用,只复制了目录文件。任何帮助将不胜感激。
答案 0 :(得分:0)
这应该有效:
@echo off &setlocal
set "dSource=c:\test\a"
set "dTarget=c:\test\op"
set "fType=*.txt"
DIR /A:D /B %dSource% > folders.txt
for /f %%G in (folders.txt) do for %%i in ("%dSource%\%%G\%fType%") do if not exist "%dtarget%\%%~nxi" (copy /b "%%~i" "%dtarget%") else call :process "%%~i"
goto :eof
:process
set /a cnt=-1
:loop
set /a cnt+=1
set "fname=%dtarget%\%~n1(%cnt%)%~x1"
if exist "%fname%" goto :loop
copy /b "%~1" "%fname%"
goto :eof
endlocal
答案 1 :(得分:0)
这是另一种应该成功的方法:
@echo off
setlocal enabledelayedexpansion
for /r %%a in (*.txt) do copy /-Y "%%a" "d:\target\folder\%%~na - !random!!random!%%~xa"