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

hazardhz 28-12-2010 17:04 1576399

Переместить файлы, в имени которых больше трех цифр.
 
Всем привет!

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

gora 29-12-2010 10:19 1576821

Код:

@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 1576989

Все работает, да. Сейчас буду курить код, разбираться)
Gora, спасибо большое!

El Sanchez 30-12-2010 17:45 1577935

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 1676100

Здравствуйте. Напишите, пожалуйста, если это возможно, как реализовать такое при помощи файла *.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 1676154

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"


Время: 01:56.

Время: 01:56.
© OSzone.net 2001-