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

VitHAK 27-07-2009 22:20 1179347

[решено] Перемещение и удаление файлов по условию и маске
 
Привет всем!

Такая задача:

Цитата:

Есть каталог D:\Program. В нём есть другие каталоги. В этих каталогов разные имена, все эти имена на русском.

Нужно:

1. Проверить D:\Program\<все каталоги>\ на присутствие каталога images. Еслы он есть тогда нужно переместить все *.jpg c D:\Program\<все каталоги>\images в D:\images.
2. Проверить D:\Program\<все каталоги>\ на присутствие каталогов по маске data*. Еслы они есть тогда нужно удалить все эти каталоги.
3. Проверить D:\Program\<все каталоги>\ на присутствие файлов *.log , *.bak , *.tmp. Еслы они есть тогда нужно удалить все эти файлы.
P.S. Возможно ли такое сделать с каталогами на русском языке?

Petya V4sechkin 28-07-2009 11:26 1179662

Цитата:

Цитата VitHAK
Возможно ли такое сделать с каталогами на русском языке?

Без разницы.
Код:

@Echo Off
SetLocal EnableExtensions

Set SrcDir=D:\Program
For /F "Delims=" %%I In ('Dir "%SrcDir%\images.*" /AD /B /S') Do (
  If "%%~xI"=="" (
    If Exist "%%~I\*.jpg" (
      If Not Exist D:\images MD D:\images
      Move "%%~I\*.jpg" D:\images\
    )
  )
)
For /F "Delims=" %%I In ('Dir "%SrcDir%\data*" /AD /B /S') Do (
  RD /S /Q "%%~I"
)
Del /F /S /Q "%SrcDir%\*.log" "%SrcDir%\*.bak" "%SrcDir%\*.tmp"


VitHAK 28-07-2009 11:38 1179669

Petya V4sechkin, Спасибо! Все работает!

amel27 28-07-2009 12:04 1179686

Цитата:

Цитата VitHAK
нужно переместить все *.jpg c D:\Program\<все каталоги>\images в D:\images »

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

Цитата:

Цитата VitHAK
Возможно ли такое сделать с каталогами на русском языке? »

язык не важен, проблемы могут быть со спецсимволами в именах файлов/каталогов типа кавычек и многоточий - встречаются при сохранении интернет-страниц

Petya V4sechkin, без EnableExtensions тоже вроде работает:
Код:

@Echo off

Set $SRC=D:\Program
Set $DST=D:\Images

For /F "Delims=" %%i In ('DIR /A:D/S/B "%$SRC%\Images"') Do MOVE "%%i\*.jpg" "%$DST%\"
For /F "Delims=" %%i In ('DIR /A:D/S/B "%$SRC%\data*"')  Do RD /S/Q "%%i"
Del /F/S/Q "%$SRC%\*.log" "%$SRC%\*.bak" "%$SRC%\*.tmp"


Petya V4sechkin 28-07-2009 12:09 1179690

Цитата:

Цитата amel27
без EnableExtensions тоже вроде работает

Я по привычке (EnableExtensions включен по умолчанию).

Цитата:

Цитата amel27
For /F "Delims=" %%i In ('DIR /A:D/S/B "%$SRC%\Images"')

Если папка D:\Program\images существует, так не сработает (именно поэтому пришлось добавить * и в цикле анализировать).

amel27 28-07-2009 12:32 1179708

Цитата:

Цитата Petya V4sechkin
Если папка D:\Program\images существует, так не сработает »

точно! было, чувствую тут где-то подстава, но уже не помню : )

VitHAK 28-07-2009 12:44 1179721

Цитата:

Цитата amel27
гм... а что делать, если в разных подкаталогах окажутся файлы с одинаковыми именами?.. заменять при переносе? »

Я не подумал об этом. Проблема в том что у меня в D:\Program\<все каталоги>\images всего один *.jpg. Он у всех каталогах одинаковой logo.jpg.

Лутшим решением этой проблемы было б переименовать logo.jpg в имя каталога в котором images которого найден этот *.jpg

amel27 28-07-2009 13:13 1179744

Цитата:

Цитата VitHAK
Лутшим решением этой проблемы было б переименовать logo.jpg в имя каталога в котором images »

ну, если имена каталогов уникальны, то где-то так:
Код:

@Echo off

Set $SRC=D:\Program
Set $DST=D:\Images

For /F "Delims=" %%i In ('DIR /A:D/S/B "%$SRC%\*"') Do If Exist "%%i\Images\logo.jpg" (
  REN "%%i\Images\logo.jpg" "%%~ni.jpg"
  MOVE "%%i\Images\%%~ni.jpg" "%$DST%\"
)

For /F "Delims=" %%i In ('DIR /A:D/S/B "%$SRC%\data*"')  Do RD /S/Q "%%i"
Del /F/S/Q "%$SRC%\*.log" "%$SRC%\*.bak" "%$SRC%\*.tmp"


pegasus 28-06-2010 10:02 1443044

Помогите пожалуйста написать такой bat файл:
Есть путь c:\Documents and Settings\user\Local Settings\Temp\bps\plot\ugt_33_20\ в этом каталоге создаются множество других каталогов содержащих файлы *.hpg нужно собрать эти все файлы и переместить в папу f:\plot

deepred 28-06-2010 10:28 1443055

pegasus,

Цитата:

Помогите пожалуйста написать такой bat файл: Есть путь c:\Documents and Settings\user\Local Settings\Temp\bps\plot\ugt_33_20\ в этом каталоге создаются множество других каталогов содержащих файлы *.hpg нужно собрать эти все файлы и переместить в папу f:\plot
А чем не устраивает решение предложеное amel27 в post #8, достаточно заменить адреса директорий в переменных $SRC и $DST. Да и посмотреть имеют ли файлы *.hpg уникальные имена, если нет то оставить команду на переименование, а если да - убрать.

pegasus 28-06-2010 13:46 1443133

Большое спасибо! После некоторых модификаций заработало!

Exerion 06-01-2012 16:32 1829647

Всем доброго времени суток. Прошу прощения за некропостинг, но эта тема наиболее подходит под мою задачу.
Задача проще, чем у топикстартера: существует каталог, в котором много под-каталогов. Нужно отыскать все файлы *.mp3 в этих подкаталогах и скопировать их в другой каталог.
Попытался самостоятельно переделать вышерасположенные решения:

Код:

@Echo Off
SetLocal EnableExtensions

Set SrcDir=D:\games\other\osu!\Songs
For /F "Delims=" %%I In ('Dir "%SrcDir%\*" /AD /B /S') Do (
  If "%%~xI"=="" (
    If Exist "%%~I\*.mp3" (
      If Not Exist D:\mp3 MD D:\mp3
      Move "%%~I\*.mp3" D:\mp3\
    )
  )
)

Однако данный вариант не даёт результата. Что я делаю не так?

megaloman 06-01-2012 19:19 1829796

Exerion, Для начала, формат команды For неверен - кавычки неправильные. Сделайте For /? >C:\_For_Help.txt В файле посмотрИте, какие нужны. Дальше копать поленился.
По Вашему коду видно, что Вы хотите не скопировать (Copy) файлы, а переместить их (Move). Вот вариант решения (при совпадении имени файл перемещен не будет, батник выдаст ошибку)
Код:

@Echo Off

Set From=E:\Над крылечком
Set To=E:\Дым колечком
Set Mask=*.mp3

Md "%To%" >Nul 1>Nul 2>Nul

For /F "usebackq delims=" %%f In (`Dir "%From%\%Mask%" /A:-D /B /S`) Do Move "%%f" "%To%\"

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

@Echo Off

Set From=E:\Над крылечком
Set To=E:\Дым колечком
Set Mask=*.mp3

Md "%To%" >Nul 1>Nul 2>Nul

Move "%From%\%Mask%" "%To%\" >nul 1>Nul 2>Nul
For /F "usebackq delims=" %%f In (`Dir "%From%" /A:D /B /S`) Do Move "%%f\%Mask%" "%To%\"  >nul 1>Nul 2>Nul


kolik76 23-12-2013 07:11 2277114

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

Iska 23-12-2013 08:57 2277135

kolik76, теперь переведите на русский.


Время: 18:16.

Время: 18:16.
© OSzone.net 2001-