Войти

Показать полную графическую версию : [решено] Батник для раскидывания файлов по папкам


alex_alex
10-04-2014, 09:03
Есть папка с файлами, в имени которых последние 3 символа перед расширением определяют принадлежность. Например:
111_111.txt
222_111.txt
111_222.txt
222_222.txt

Нужен батник, который сможет, проверив файлы в каталоге, скопировать файлы *111.txt в папку 111, а *222.txt в папку 222.

Что нужно будет добавить в батник, если в исходную папку добавятся папки и их тоже надо будет просмотреть?

Georgio
10-04-2014, 12:47
Нужен батник, который сможет, проверив файлы в каталоге, скопировать файлы *111.txt в папку 111, а *222.txt в папку 222. »

@echo off
setlocal enabledelayedexpansion
for %%i in (*) do (
if not "%%~fi"=="%~f0" (
for %%j in ("%%~ni") do (
set name=%%~j
set name=!name:~-3!
if not exist "!name!" (
md "!name!"
)
if not exist "!name!\%%~nxi" (
copy "%%i" "!name!">nul
)
)
)
)
endlocal
exit /b

.


Что нужно будет добавить в батник, если в исходную папку добавятся папки и их тоже надо будет просмотреть? »

for /r %%i in (*) do (

.


Пакетный файл поместить в каталог с обрабатываемыми файлами. Нужные папки, еспи они не существуют в данном каталоге, будут в нём созданы.

alex_alex
10-04-2014, 14:10
if not "%%~fi"=="%~f0" »
Что делает эта строка?

Georgio
10-04-2014, 15:09
Эта строка кода всего лишь предотвращает создание папки для самого пакетного файла и его копирование в зту папку. Если атрибутировать пакетный файл как скрытый, то данную строку и соответствующую ей закрывающую скобку можно убрать. Если же у Вас все обрабатываемые файлы имеют одно или несколько расширений, отличных от расширения пакетного файла, то это условие также можно убрать, но в наборе указать маски: for %%i in (*.txt *.rtf) do (.

alex_alex
10-04-2014, 15:20
Спасибо огромное за оперативное и качественное решение.




© OSzone.net 2001-2012