Войти

Показать полную графическую версию : [решено] Переместить файлы, в имени которых больше трех цифр.


hazardhz
28-12-2010, 17:04
Всем привет!

Собственно, задачка описана в теме. Искомый каталог и каталог для перемещения передаются параметрами bat-файлу. И желательно было бы вы перемещаемые файлы вывести на экран.

gora
29-12-2010, 10:19
@echo off
SetLocal enabledelayedexpansion
:: исходная папка
Set folder=%~1
:: папка получатель
Set out=%~2

For /R "%folder%" %%a In (*.*) Do (
Set name=#%%~na
Call :_cntchr "!name!" ocnt
For /L %%i In (0,1,9) Do Set name=!name:%%i=!
Call :_cntchr "!name!" tcnt
Set /A delta=ocnt-tcnt
If !delta! GTR 3 Echo %%a& Move "%%a" "%out%\%%~nxa"
)
pause

:_cntchr
Set %2=0
Set tn=%~1
:_loop
If Not Defined tn GoTo :EOF
Set /A %2+=1
Set tn=!tn:~1!
GoTo :_loop

hazardhz
29-12-2010, 14:00
Все работает, да. Сейчас буду курить код, разбираться)
Gora, спасибо большое!

El Sanchez
30-12-2010, 17:45
hazardhz, до кучи вариант №2:

@Echo Off
If "%~1"=="" Echo Error. Source folder is not specified.&Exit /B 1
If "%~2"=="" Echo Error. Output folder is not specified.&Exit /B 1
For /F "Tokens=*" %%A In ('Dir /B /S /A-D "%~1"^|FindStr /R .*\\[^^^^\\]*[0-9][^^^^\\]*[0-9][^^^^\\]*[0-9][^^^^\\]*[0-9][^^^^\\]*[.].*') Do (
Echo %%A
Call :_Func "%%A" "%~1" "%~2"
)
GoTo :EOF

:_Func
Set Source=%~dp1
Call MD "%%Source:%~2\=%~3\%%" 2>nul
Call Move /Y %1 "%%Source:%~2=%~3\%%" >nul

SharkyEXE
14-05-2011, 09:51
Здравствуйте. Напишите, пожалуйста, если это возможно, как реализовать такое при помощи файла *.cmd
1) Для примера, в папке C:\1 есть как файлы формата %y%.%m%.%d%.txt, где %y% - год, %m% - месяц, %d% - день, .txt - расширение файла, так и файлы других форматов: с расширениями, отличными от *.txt и другими названиями. Для примера, в папке C:\1 есть как файлы:2011.01.23.txt
2011.02.26.txt
2011.03.30.txt
...так есть и файлы:VFS.vfs
filelist.tpl
...2) Нужно при запуске файла *.cmd в папке C:\1 найти все файлы, название+расширение которых соответствует пункту 1), т. е. %y%.%m%.%d%.txt и переместить все эти файлы в папку C:\2. Спасибо.

Foreigner
14-05-2011, 12:32
SharkyEXE,

@echo off

for /f "tokens=*" %%i in ('

dir /b /a "C:\1\*.txt" ^| findstr /b /e "[0-9]*\.[0-9]*\.[0-9]*\.txt"

') do move %%i "C:\2"


В зависимости от конкретного случая можно упростить условия поиска или наоборот привести к точному соответствию, например:

findstr /i /b /e "[0-9][0-9][0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]\.txt"




© OSzone.net 2001-2012