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

djvall 03-02-2011 14:24 1603554

Поиск файлов и перемещение каталога
 
Подскажите!

Имеется проблемка: необходимо в некотором каталоге есть подкаталоги, которые содержат некие файлы, в одном подкаталоге могут содержаться файлы и txt и dbf и т.д.
так вот необходимо найти подкаталоги, кот. содержат хотя бы один файл txt, и переместить эти подкаталоги (вместе с содержимым) в некую папку KONTYNER.

набросал вот такую вещь, но она не работает

@echo on
cls
set mask="*.txt*"
rem Получение путей каталогов по маске
dir /b/s/o/n/a:-d "%~dp0Base\%mask%">ret.txt
rem Перемещение катологов
for /F "tokens=*" "%%i" in (%~dp0\ret.txt) do (
move "%~fi\*.*" "%~dp0KONTYNER\")
rem Удаление временного файла
del /q "%~dp0\ret.txt"
pause

SendMessage 03-02-2011 18:10 1603702

Попробуй так:
Код:

@echo of
setlocal enabledelayedexpansion

set "MainDir=%~dp0Base"
set "OutDir=%~dp0KONTYNER"

for /f "tokens=*" %%a in ('dir /a-d/s/b "%MainDir%\*.txt"') do (
  set "TxtDirPath=%%~dpa"
  set "OutSubDir=%OutDir%\!TxtDirPath:%MainDir%\=!"
  if not exist "!OutSubDir!" (
      md "!OutSubDir!" && move "!TxtDirPath!*.*" "!OutSubDir!" && rd "!TxtDirPath!"
  )
)


djvall 04-02-2011 09:00 1604068

пояснить можете эту строчку:
Цитата:

Цитата SendMessage
set "OutSubDir=%OutDir%\!TxtDirPath:%MainDir%\=!" »

как это работает и можете подробнее про вот такие логические выражения:
=%OutDir%\!TxtDirPath:%MainDir%\=!"

и еще, не могу нигде найти почему выделяется !...!
Цитата:

Цитата SendMessage
md "!OutSubDir!" »

Спасибо!

djvall 04-02-2011 09:32 1604087

Цитата:

Цитата SendMessage
@echo of
setlocal enabledelayedexpansion
set "MainDir=%~dp0Base"
set "OutDir=%~dp0KONTYNER"
for /f "tokens=*" %%a in ('dir /a-d/s/b "%MainDir%\*.txt"') do (
set "TxtDirPath=%%~dpa"
set "OutSubDir=%OutDir%\!TxtDirPath:%MainDir%\=!"
if not exist "!OutSubDir!" (
md "!OutSubDir!" && move "!TxtDirPath!*.*" "!OutSubDir!" && rd "!TxtDirPath!"
)
) »

Работает просто ИДЕАЛЬНО. Еще раз спасибо SendMessage !!!


Время: 13:21.

Время: 13:21.
© OSzone.net 2001-