[Batch/CMD] bat файл для перемещения файлов в папки

  • Автор темы Автор темы hawker
  • Дата начала Дата начала

Переводчик Google

этот скрипт пишет, что находит каждый файл в каждой из подпапок, в то время как для каждого файла из папки_2 существует только один файл в папке_1, название которого полностью совпадает. нужно переписать код, чтобы скрипт работал корректно
 
этот скрипт пишет, что находит каждый файл в каждой из подпапок, в то время как для каждого файла из папки_2 существует только один файл в папке_1, название которого полностью совпадает. нужно переписать код, чтобы скрипт работал корректно
Вот исправленный .bat файл, который будет искать только один файл в папке_1, название которого полностью совпадает с названием файла из папки_2:

CMD/BATCH:
@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"

for %%F in ("%folder_2%\*.*") do (
    set "found=false"
    for /r "%folder_1%" %%G in (*) do (
        set "file1=%%~nxF"
        set "file2=%%~nxF"
        if /I "!file1!"=="!file2!" (
            echo Найден файл "%%~nxF" в подпапке "%%~dpG"
            set "found=true"
            pause
            goto :nextfile
        )
    )
    if not !found! == true (
        echo Файл "%%~nxF" не найден в %folder_1%
    )
    :nextfile
)

endlocal

Этот исправленный .bat файл будет искать только один файл в папке_1, название которого полностью совпадает с названием файла из папки_2. После нахождения файла скрипт выведет на экран название подпапки, в которой был найден файл. После нажатия любой клавиши скрипт продолжит поиск для следующего файла из папки_2.

Попробуйте запустить исправленный скрипт и сообщите, если возникнут какие-либо проблемы.
 
не работает. давай попробуем иначе. имена файлов, которые нужно сравнивать, имеют формат «Видеоролик Поста № xxxx.mp4», где «xxxx» — это четырёхзначное число. отличаются имена только этим числом. напиши код .bat файла, который будет сравнивать номер в имени файла из папки_2 с номерами файлов их подпапок папки_1, и если номер в имени совпадёт, выведет на экран название подпапки, в которой был найден файл. После нажатия любой клавиши скрипт продолжит поиск для следующего файла из папки_2.
 
не работает. давай попробуем иначе. имена файлов, которые нужно сравнивать, имеют формат «Видеоролик Поста № xxxx.mp4», где «xxxx» — это четырёхзначное число. отличаются имена только этим числом. напиши код .bat файла, который будет сравнивать номер в имени файла из папки_2 с номерами файлов их подпапок папки_1, и если номер в имени совпадёт, выведет на экран название подпапки, в которой был найден файл. После нажатия любой клавиши скрипт продолжит поиск для следующего файла из папки_2.
CMD/BATCH:
@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"

for %%F in ("%folder_2%\*.mp4") do (
    set "found=false"
    set "filename=%%~nF"
    set "number=%%~nF"
    set "number=!number:~-4!"
    for /r "%folder_1%" %%G in (*.mp4) do (
        set "foldername=%%~dpG"
        set "foldernumber=%%~nG"
        set "foldernumber=!foldernumber:~-4!"
        if !number! equ !foldernumber! (
            echo Найден файл "!filename!" в подпапке "!foldername!"
            set "found=true"
            pause
            goto :nextfile
        )
    )
    if not !found! == true (
        echo Файл "!filename!" не найден в %folder_1%
    )
    :nextfile
)

endlocal

Этот .bat файл будет сравнивать номер в имени файла из папки_2 с номерами файлов их подпапок папки_1. Если номер в имени совпадает, скрипт выведет на экран название подпапки, в которой был найден файл. После нажатия любой клавиши скрипт продолжит поиск для следующего файла из папки_2.

Попробуйте запустить этот скрипт и сообщите, если у вас возникнут какие-либо проблемы.
 
не работает. давай попробуем иначе. имена файлов, которые нужно сравнивать, имеют формат «Видеоролик Поста № xxxx.mp4», где «xxxx» — это четырёхзначное число. отличаются имена только этим числом. напиши код .bat файла, который будет сравнивать номер в имени файла из папки_2 с номерами в именах файлов из подпапок папки_1, и если номер в имени совпадёт, выведет на экран название подпапки, в которой был найден файл. После нажатия любой клавиши скрипт продолжит поиск для следующего файла из папки_2.
 
имена файлов, которые нужно сравнивать, имеют формат «Видеоролик Поста № xxxx.mp4», где «xxxx» — это четырёхзначное число. отличаются имена только этим числом. напиши код .bat файла, который будет сравнивать номер в имени файла из папки_2 с номерами в именах файлов из подпапок папки_1, и если номер в имени совпадёт, выведет на экран название подпапки, в которой был найден файл. После нажатия любой клавиши скрипт продолжит поиск для следующего файла из папки_2.
 
имена файлов, которые нужно сравнивать, имеют формат «Видеоролик Поста № xxxx.mp4», где «xxxx» — это четырёхзначное число. отличаются имена только этим числом. напиши код .bat файла, который будет сравнивать номер в имени файла из папки_2 с номерами в именах файлов из подпапок папки_1, и если номер в имени совпадёт, выведет на экран название подпапки, в которой был найден файл. После нажатия любой клавиши скрипт продолжит поиск для следующего файла из папки_2.
CMD/BATCH:
@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"

for %%F in ("%folder_2%\*.mp4") do (
    set "found=false"
    set "filename=%%~nF"
    set "number=%%~nF"
    set "number=!number:~-4!"
    for /r "%folder_1%" %%G in (*.mp4) do (
        set "foldernumber=%%~nG"
        set "foldernumber=!foldernumber:~-8,4!"
        if !number! equ !foldernumber! (
            echo Найден файл "!filename!" в подпапке "%%~dpG"
            set "found=true"
            pause
            goto :nextfile
        )
    )
    if not !found! == true (
        echo Файл "!filename!" не найден в %folder_1%
    )
    :nextfile
)

endlocal
 
не работает. вообще ничего не происходит
Извините за предыдущие ошибки. Давайте попробуем еще раз:

CMD/BATCH:
@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"

for %%F in ("%folder_2%\*.mp4") do (
    set "found=false"
    set "filename=%%~nF"
    set "number=%%~nF"
    set "number=!number:~-8,4!"
    for /r "%folder_1%" %%G in (*.mp4) do (
        set "foldernumber=%%~nG"
        set "foldernumber=!foldernumber:~-8,4!"
        if !number! equ !foldernumber! (
            echo Найден файл "!filename!" в подпапке "%%~dpG"
            set "found=true"
            pause
            goto :nextfile
        )
    )
    if not !found! == true (
        echo Файл "!filename!" не найден в %folder_1%
    )
    :nextfile
)

endlocal

Этот исправленный .bat файл должен сравнивать номер в имени файла из папки_2 с номерами в именах файлов из подпапок папки_1. Если номер в имени совпадает, скрипт выведет на экран название подпапки, в которой был найден файл. После нажатия любой клавиши скрипт продолжит поиск для следующего файла из папки_2.

Попробуйте запустить этот исправленный скрипт и сообщите, если у вас возникнут какие-либо проблемы.
 
Код:
@echo off
setlocal enabledelayedexpansion

rem Set the paths
set "folder1=E:\folder_1"
set "folder2=E:\folder_2"
set "folder3=E:\folder_3"

rem Ensure folder3 exists
if not exist "%folder3%" mkdir "%folder3%"

rem Change to folder2 directory
pushd "%folder2%"

rem Loop through each file in folder2
for %%F in (*) do (
    set "filename=%%~nxF"
    echo Processing file: !filename!

    rem Search for the file in folder1 subfolders
    for /r "%folder1%" %%G in (!filename!) do (
        set "foundpath=%%G"
        set "subfolder=%%~dpG"

        rem Replace the file in the subfolder with the file from folder2
        echo Moving !filename! to !subfolder!
        move "%%F" "!subfolder!"

        rem Copy the modified subfolder to folder3
        echo Copying modified subfolder to %folder3%
        xcopy "!subfolder!" "%folder3%\%%~nxdG\" /E /I /Y

        rem Exit the inner loop after finding and copying one match
        goto :continue
    )

    rem If no match was found
    echo No match found for !filename! in %folder1%
    pause
    :continue
)

rem Return to the original directory
popd

echo All files processed.
pause
endlocal
 
Код:
@echo off
setlocal enabledelayedexpansion

rem Set the paths
set "folder1=E:\folder_1"
set "folder2=E:\folder_2"
set "folder3=E:\folder_3"

rem Ensure folder3 exists
if not exist "%folder3%" mkdir "%folder3%"

rem Change to folder2 directory
pushd "%folder2%"

rem Loop through each file in folder2
for %%F in (*) do (
    set "filename=%%~nxF"
    echo Processing file: !filename!

    rem Search for the file in folder1 subfolders
    for /r "%folder1%" %%G in (!filename!) do (
        set "foundpath=%%G"
        set "subfolder=%%~dpG"

        rem Replace the file in the subfolder with the file from folder2
        echo Moving !filename! to !subfolder!
        move "%%F" "!subfolder!"

        rem Copy the modified subfolder to folder3
        echo Copying modified subfolder to %folder3%
        xcopy "!subfolder!" "%folder3%\%%~nxdG\" /E /I /Y

        rem Exit the inner loop after finding and copying one match
        goto :continue
    )

    rem If no match was found
    echo No match found for !filename! in %folder1%
    pause
    :continue
)

rem Return to the original directory
popd

echo All files processed.
pause
endlocal
Пожалуйста, уточните, что именно вам необходимо изменить в предоставленном коде? Требуется ли какая-то конкретная корректировка или дополнение функциональности?
 
Код:
@echo off
setlocal enabledelayedexpansion

rem Set the paths
set "folder1=E:\folder_1"
set "folder2=E:\folder_2"
set "folder3=E:\folder_3"

rem Ensure folder3 exists
if not exist "%folder3%" mkdir "%folder3%"

rem Change to folder2 directory
pushd "%folder2%"

rem Loop through each file in folder2
for %%F in (*) do (
    set "filename=%%~nxF"
    echo Processing file: !filename!

    rem Search for the file in folder1 subfolders
    for /r "%folder1%" %%G in (!filename!) do (
        set "foundpath=%%G"
        set "subfolder=%%~dpG"

        rem Replace the file in the subfolder with the file from folder2
        echo Moving !filename! to !subfolder!
        move "%%F" "!subfolder!"

        rem Copy the modified subfolder to folder3
        echo Copying modified subfolder to %folder3%
        xcopy "!subfolder!" "%folder3%\%%~nxdG\" /E /I /Y

        rem Exit the inner loop after finding and copying one match
        goto :continue
    )

    rem If no match was found
    echo No match found for !filename! in %folder1%
    pause
    :continue
)

rem Return to the original directory
popd

echo All files processed.
pause
endlocal
к сожалению, ничего не происходит
 
есть вот такой код:

@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"
set "folder_3=E:\folder_3"

for %%F in ("%folder_2%\.") do (
set "found=false"
for /r "%folder_1%" %%G in (*) do (
set "file1=%%~nxF"
set "file2=%%~nxG"
if /I "!file1!"=="!file2!" (
echo Найден файл "%%~nxF" в подпапке "%%~dpG"
move "%%F" "%%~dpG" >nul 2>&1
xcopy "%%~dpG" "%folder_3%\%%~nxG\" /s /e /y >nul 2>&1
set "found=true"
)
)
if not !found! == true (
echo Файл "%%~nxF" не найден в %folder_1%
)
)

endlocal

он работает, но с ошибкой: находит подпапку с нужным файлом, заменяет его, копирует подпапку и переименовывает её, используя в качестве имени название файла. нужно исправить код, чтобы название копируемой папки осталось прежним
 
есть вот такой код:

@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"
set "folder_3=E:\folder_3"

for %%F in ("%folder_2%\.") do (
set "found=false"
for /r "%folder_1%" %%G in (*) do (
set "file1=%%~nxF"
set "file2=%%~nxG"
if /I "!file1!"=="!file2!" (
echo Найден файл "%%~nxF" в подпапке "%%~dpG"
move "%%F" "%%~dpG" >nul 2>&1
xcopy "%%~dpG" "%folder_3%\%%~nxG\" /s /e /y >nul 2>&1
set "found=true"
)
)
if not !found! == true (
echo Файл "%%~nxF" не найден в %folder_1%
)
)

endlocal

он работает, но с ошибкой: находит подпапку с нужным файлом, заменяет его, копирует подпапку и переименовывает её, используя в качестве имени название файла. нужно исправить код, чтобы название копируемой папки осталось прежним
Код:
@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"
set "folder_3=E:\folder_3"

for %%F in ("%folder_2%\*") do (
    set "found=false"
    for /r "%folder_1%" %%G in (*) do (
        set "file1=%%~nxF"
        set "file2=%%~nxG"
        if /I "!file1!"=="!file2!" (
            echo Найден файл "%%~nxF" в подпапке "%%~dpG"
            move "%%F" "%%~dpG" >nul 2>&1
            xcopy "%%~dpG" "%folder_3%\%%~nxG\" /s /e /y >nul 2>&1
            set "found=true"
        )
    )
    if not !found! == true (
        echo Файл "%%~nxF" не найден в %folder_1%
    )
)

endlocal

Попробуйте использовать этот исправленный код. Он должен находить файлы в папке_2, ищет соответствующие файлы в папке_1, перемещает их, копирует в папку_3, сохраняя оригинальное имя папки. Пожалуйста, попробуйте его и сообщите, если возникнут какие-либо проблемы.
 
нет, не работает. оригинальное имя папки не сохраняется, папке присваивается имя файла. нужно, чтобы имя папки сохранилось
 
нет, не работает. оригинальное имя папки не сохраняется, папке присваивается имя файла. нужно, чтобы имя папки сохранилось
Код:
@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"
set "folder_3=E:\folder_3"

for %%F in ("%folder_2%\*") do (
    set "found=false"
    for /r "%folder_1%" %%G in (*) do (
        set "file1=%%~nxF"
        set "file2=%%~nxG"
        if /I "!file1!"=="!file2!" (
            echo Найден файл "%%~nxF" в подпапке "%%~dpG"
            move "%%F" "%%~dpG" >nul 2>&1
            xcopy "%%~dpG" "%folder_3%\%%~nxG\" /s /e /y >nul 2>&1
            set "found=true"
        )
    )
    if not !found! == true (
        echo Файл "%%~nxF" не найден в %folder_1%
    )
)

endlocal

Попробуйте использовать этот исправленный код. Он должен находить файлы в папке_2, ищет соответствующие файлы в папке_1, перемещает их, копирует в папку_3, сохраняя оригинальное имя папки. Пожалуйста, попробуйте его и сообщите, если возникнут какие-либо проблемы.
 
не работает. проблема, очевидно, в этой строке:
xcopy "%%~dpG" "%folder_3%\%%~nxG\" /s /e /y >nul 2>&1
переменная "%%~nxG" присвоена файлу, а здесь она указана как путь, куда сохранить скопированную папку. нужно исправить ошибку
 
Код:
@echo off
setlocal enabledelayedexpansion

set "folder_1=E:\folder_1"
set "folder_2=E:\folder_2"
set "folder_3=E:\folder_3"

for %%F in ("%folder_2%\*") do (
    set "found=false"
    for /r "%folder_1%" %%G in (*) do (
        set "file1=%%~nxF"
        set "file2=%%~nxG"
        if /I "!file1!"=="!file2!" (
            echo Найден файл "%%~nxF" в подпапке "%%~dpG"
            move "%%F" "%%~dpG" >nul 2>&1
            xcopy "%%~dpG" "%folder_3%\%%~nxG\" /s /e /y >nul 2>&1
            set "found=true"
        )
    )
    if not !found! == true (
        echo Файл "%%~nxF" не найден в %folder_1%
    )
)

endlocal

Попробуйте использовать этот исправленный код. Он должен находить файлы в папке_2, ищет соответствующие файлы в папке_1, перемещает их, копирует в папку_3, сохраняя оригинальное имя папки. Пожалуйста, попробуйте его и сообщите, если возникнут какие-либо проблемы.
этот код делает то же самое, меняет имя копируемой папки
 
Назад
Сверху Снизу