Показать полную графическую версию : Перемещение файлов в каталог из подкаталога с удалением подкаталогов
Добрый день!
Прошу помочь в составлении 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 и т.д.
Заранее благодарю!
@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
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
)
Iska, отлично решило мою задачу.
Foreigner, получилось что батник нашел файлы в подкаталогах каталога, переместил их в каталог, содержащий данные подкаталоги, удалил подкаталоги, но зачем то переименовал эти файлы...
Foreigner, а "subst" применили, чтобы уменьшить возможные ошибки "dir"?
Foreigner
30-11-2014, 18:23
Georgio, :)
Случайно получилось... Перепутал с другой типовой задачей (обрезка пути). Конечно можно без subst
но зачем то переименовал эти файлы... »
Все? Или только те, которые с одинаковым именем?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.