Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Перемещение файлов в каталог из подкаталога с удалением подкаталогов (http://forum.oszone.net/showthread.php?t=291870)

Rema 30-11-2014 15:50 2437618

Перемещение файлов в каталог из подкаталога с удалением подкаталогов
 
Добрый день!

Прошу помочь в составлении BAT-файла для следующей задачи:
1. Есть каталог C:\1
2. В каталоге C:\1 размещены подкаталоги с разными именами A, B, C и т.д.
3. Подкаталог:
A содержит файлы файл1, файл4...
B содержат файлы файл4, файл7, файл8
С содержит файлы файл3...
и т.д.

Необходимо переместить файлы из подкаталогов A, B, C и т.д. в каталог C:\1 и удалить пустые подкаталоги A, B, C и т.д.

Заранее благодарю!

Iska 30-11-2014 16:04 2437628

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=C:\1

if exist "%sSourceFolder%\." (
        for /d %%i in ("%sSourceFolder%\*.*") do (
                move "%%~i\*.*" "%sSourceFolder%\"
                rd "%%~i"
        )
) else (
        echo Can't find source folder [%sSourceFolder%].
        exit /b 1
)

endlocal
exit /b 0

Существующие файлы будут перезаписаны без предупреждения. Аналогично и с одноимёнными в исходных подкаталогах — останется только перемещённый последним.

Foreigner 30-11-2014 16:57 2437644

Rema, с проверкой на наличие файлов с одинаковым именем
Код:

@echo off
setlocal

for %%i in (x y z) do if not exist %%i: set disk=%%i:

subst %disk% "C:\1"
pushd %disk% || goto:eof

for /f "tokens=*" %%i in (' dir /b /s /a-d ') do call:move "%%i"
for /f %%i in (' dir /b /ad ') do rd /s /q "%%i"

popd
subst %disk% /d
goto:eof


:move

set "file=%~nx1%"
set "cnt="

:check
   
set /a cnt+=1
if not exist "%file%" ( move %1 "%file%" ) else (

    set "file=%~n1_%cnt%%~x1"
    goto:check
   
)


Rema 30-11-2014 17:09 2437649

Iska, отлично решило мою задачу.

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

Georgio 30-11-2014 17:12 2437650

Foreigner, а "subst" применили, чтобы уменьшить возможные ошибки "dir"?

Foreigner 30-11-2014 18:23 2437685

Georgio, :)

Случайно получилось... Перепутал с другой типовой задачей (обрезка пути). Конечно можно без subst

Цитата:

Цитата Rema
но зачем то переименовал эти файлы... »

Все? Или только те, которые с одинаковым именем?


Время: 00:59.

Время: 00:59.
© OSzone.net 2001-