Войти

Показать полную графическую версию : [решено] Анализ на количество символов в названии файла/папки


айкот
04-10-2011, 13:45
Добрый день.
командой
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
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 символов в имени - разумного объяснения этому у меня нет. Аналогичная тема обсуждалась тут. (http://forum.oszone.net/thread-215958.html) По результатам обсуждения (спасибо еще раз 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
айкот, как-то так:
@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
Цитата:
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
Я дополнил ответ. Смотрите выше. Если файлы разной длины надо копировать в разные места - нет проблем: напишите несколько циклов с нужными регулярными выражениями и нужными путями (если, конечно, длина имени не более 4 символов), иначе поищем другое решение.
"^....\.arj$" - для 4
"^...\.arj$" - для 3
"^..\.arj$" - для 2
"^.\.arj$" - для 1

Petya V4sechkin
04-10-2011, 15:18
Такой командой
Зачем вы все в одно строчку свалили?

айкот
04-10-2011, 15:25
Зачем вы все в одно строчку свалили? »
если не в одной строчке:

the syntax of the command is incorrect

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

айкот
04-10-2011, 15:34
айкот, формулируйте точнее задачу, куда девать файлы с названиями разной длины? Расширения одни и те же? »
Пример, существует два файла: qqq.arj qqqq.arj. Файл qqq.arj копируем в папку a, файл qqq.arj копируем в папку b.

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




© OSzone.net 2001-2012