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

айкот 04-10-2011 13:45 1765581

Анализ на количество символов в названии файла/папки
 
Добрый день.
командой
for %%i in (d:\a\????.arj) do (xcopy /I /C /F /H /R /Y ????.arj d:\b >>d:\c\%date%.log)
копируются все файлы название которых до 4 символов. Команда писать для того что копировались файлы у который количество символов до .arj было равно 4.
Подскажите пожалуйста, что не так в моей команде. Спасибо.

megaloman 04-10-2011 14:51 1765634

Цитата:

for %%i in (d:\a\????.arj) do (xcopy /I /C /F /H /R /Y ????.arj d:\b >>d:\c\%date%.log)
Смысл этой строки не очень ясен: зачем в цикле вызывать xcopy, я бы это сделал безо всяких циклов так:
Код:

xcopy /I /C /F /H /R /Y d:\a\????.arj d:\b >>d:\c\%date%.log
Увы, при этом копируются файлы ДО 4 символов в имени - разумного объяснения этому у меня нет. Аналогичная тема обсуждалась тут. По результатам обсуждения (спасибо еще раз SendMessage) можно предложить решение
Код:

FOR /f "delims=" %%f IN ('Dir /b /A:-D "d:\a\????.arj" ^| findstr "^....\.arj$"') DO (
  xcopy /I /C /F /H /R /Y "d:\a\%%f" "d:\b" >>d:\c\%date%.log
)


Petya V4sechkin 04-10-2011 14:52 1765636

айкот, как-то так:
Код:

@Echo Off
SetLocal EnableDelayedExpansion

For %%I In (d:\a\????.arj) Do (
  Set N=%%~nI
  If Not "!N:~3,1!"=="" XCopy /I /C /F /H /R /Y "%%~I" d:\b >>d:\c\%date%.log
)


айкот 04-10-2011 14:58 1765639

Цитата:

Цитата megaloman
Цитата:
for %%i in (d:\a\????.arj) do (xcopy /I /C /F /H /R /Y ????.arj d:\b >>d:\c\%date%.log)
Смысл этой строки не очень ясен: зачем в цикле вызывать xcopy, »

Я хотел писать через if, так как если символом в файле до 4 то копировать в одно место, если до 3 то другое. Правда сейчас после того как вы подтвердили мои самые худшие ожидания, то я даже не знаю как это реализовать.

Цитата:

Цитата айкот
@Echo Off SetLocal EnableDelayedExpansion For %%I In (d:\a\????.arj) Do ( Set N=%%~nI If Not "!N:~3,1!"=="" XCopy /I /C /F /H /R /Y "%%~I" d:\b >>d:\c\%date%.log ) »

Такой командой лог файл создается но никакого копирования не происходит :(

megaloman 04-10-2011 15:17 1765652

Я дополнил ответ. Смотрите выше. Если файлы разной длины надо копировать в разные места - нет проблем: напишите несколько циклов с нужными регулярными выражениями и нужными путями (если, конечно, длина имени не более 4 символов), иначе поищем другое решение.
"^....\.arj$" - для 4
"^...\.arj$" - для 3
"^..\.arj$" - для 2
"^.\.arj$" - для 1

Petya V4sechkin 04-10-2011 15:18 1765654

Цитата:

Цитата айкот
Такой командой

Зачем вы все в одно строчку свалили?

айкот 04-10-2011 15:25 1765661

Цитата:

Цитата Petya V4sechkin
Зачем вы все в одно строчку свалили? »

если не в одной строчке:

the syntax of the command is incorrect

Цитата:

Цитата megaloman
иначе поищем другое решение. »

4 символа это просто пример, на самом деле в одного файла 22 символа в другом 14 символов.

айкот 04-10-2011 15:34 1765672

Цитата:

Цитата megaloman
айкот, формулируйте точнее задачу, куда девать файлы с названиями разной длины? Расширения одни и те же? »

Пример, существует два файла: qqq.arj qqqq.arj. Файл qqq.arj копируем в папку a, файл qqq.arj копируем в папку b.

Цитата:

Цитата megaloman
FOR /f "delims=" %%f IN ('Dir /b /A:-D "d:\a\????.arj" ^| findstr "^....\.arj$"') DO ( xcopy /I /C /F /H /R /Y "d:\a\%%f" "d:\b" >>d:\c\%date%.log ) »

Спасибо. Вот так все работает. Огромное спасибо. Также спасибо и Petya V4sechkin, для себя почерпнул чего то новое.

megaloman 04-10-2011 16:12 1765701

Код:

@Echo Off

Set Where=D:\a\
Set Ext=.arj

Call :CopyN "^...\%Ext%$" "D:\B3"
Call :CopyN "^....\%Ext%$" "D:\B4"
Call :CopyN "^.....\%Ext%$" "D:\B5"

GoTo :Eof

:CopyN
Set Maska=%~1

FOR /f "delims=" %%f IN ('Dir /b /A:-D %Where%*%Ext% ^| findstr "%Maska%"') DO (
  xcopy /I /C /F /H /R /Y "%Where%%%f" %2 >>d:\c\%date%.log
)



Время: 06:32.

Время: 06:32.
© OSzone.net 2001-