Компьютерный форум 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=280634)

alex_alex 10-04-2014 09:03 2335637

Батник для раскидывания файлов по папкам
 
Есть папка с файлами, в имени которых последние 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 2335713

Цитата:

Цитата alex_alex
Нужен батник, который сможет, проверив файлы в каталоге, скопировать файлы *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

.


Цитата:

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

Код:

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


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

alex_alex 10-04-2014 14:10 2335741

Цитата:

Цитата Georgio
if not "%%~fi"=="%~f0" »

Что делает эта строка?

Georgio 10-04-2014 15:09 2335773

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

for %%i in (*.txt *.rtf) do (
.

alex_alex 10-04-2014 15:20 2335777

Спасибо огромное за оперативное и качественное решение.


Время: 20:39.

Время: 20:39.
© OSzone.net 2001-