파일 이름을 변경하여 덮어쓰기를 방지하고 하위 폴더의 파일을 상위 폴더로 이동합니다.

파일 이름을 변경하여 덮어쓰기를 방지하고 하위 폴더의 파일을 상위 폴더로 이동합니다.

제가 질문을 이어가면서여기:

이동을 계속하면서 파일 이름을 변경하여 덮어쓰기를 피하는 것이 어떻게 가능한지 묻고 싶습니다. 예를 들어 증분 숫자로 파일 이름에 접미사를 추가하는 것과 같습니다.

아마도이 질문도움이 될 수도 있지만 지금까지 수행한 배치 파일과 통합하는 방법을 잘 모르겠습니다.

이것이 내가 지금까지 가지고 있는 것입니다:

@echo off
del /S *.json
for /f "tokens=*" %%f in ('dir /a:-D /s /b') do call :SUB_COPY "%%f" "I:\"
for /f "tokens=*" %%f in ('dir /a:D /s /b') do rd "%%f"
exit /B


:SUB_COPY source_item target_dir
if not "%~3"=="" (
    >&2 echo ERROR: too many arguments!
)
set "SOURCE=%~f1"
if not defined SOURCE (
    >&2 echo ERROR: missing argument!
    exit /B 1
) else if not exist "%SOURCE%" (
    >&2 echo ERROR: source not found!
    exit /B 1
)
set "TARGET=%~f2"
if not defined TARGET set "TARGET=."

for /F "delims=" %%I in ('
    2^> nul xcopy /L /S /E /Y /I "%SOURCE%" "%TEMP%\" ^| findstr /V /R "^[0-9]"
') do (
    > con echo "%%~I"
    call :SUB_DO "%%~I" "%TARGET%"
)
exit /B

:SUB_DO source_file target_dir
set "SUFFIX="
:CHECK
if exist "%~f2\%~n1%SUFFIX%%~x1" (
    set /A SUFFIX-=1
) else (
    2> nul md "%~f2"
    > nul 2>&1 copy /B "%~f1" "%~f2\%~n1%SUFFIX%%~x1" && (
        echo INFO: copied "%~nx1" as "%~n1%SUFFIX%%~x1".
    ) || (
        >&2 echo ERROR: copying of "%~nx1" failed!
        exit /B 1
    )
    exit /B
)
goto :CHECK

실행하면 여전히 결함이 있습니다. 일종의 루프에 빠져 이상한 파일 이름을 가진 파일을 만들기 시작합니다.

관련 정보