Анализ на количество символов в названии файла/папки
Добрый день.
командой
for %%i in (d:\a\????.arj) do (xcopy /I /C /F /H /R /Y ????.arj d:\b >>d:\c\%date%.log)
копируются все файлы название которых до 4 символов. Команда писать для того что копировались файлы у который количество символов до .arj было равно 4.
Подскажите пожалуйста, что не так в моей команде. Спасибо.
|
Цитата:
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
)
|
Цитата:
Цитата 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 ) »
|
Такой командой лог файл создается но никакого копирования не происходит :(
|
Я дополнил ответ. Смотрите выше. Если файлы разной длины надо копировать в разные места - нет проблем: напишите несколько циклов с нужными регулярными выражениями и нужными путями (если, конечно, длина имени не более 4 символов), иначе поищем другое решение.
"^....\.arj$" - для 4
"^...\.arj$" - для 3
"^..\.arj$" - для 2
"^.\.arj$" - для 1
|
Petya V4sechkin |
04-10-2011 15:18 1765654 |
Цитата:
Цитата айкот
Такой командой
|
Зачем вы все в одно строчку свалили?
|
Цитата:
Цитата Petya V4sechkin
Зачем вы все в одно строчку свалили? »
|
если не в одной строчке:
the syntax of the command is incorrect
Цитата:
Цитата megaloman
иначе поищем другое решение. »
|
4 символа это просто пример, на самом деле в одного файла 22 символа в другом 14 символов.
|
Цитата:
Цитата 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, для себя почерпнул чего то новое.
|
Код:
@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.
© OSzone.net 2001-