Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Анализ на количество символов в названии файла/папки

Ответить
Настройки темы
CMD/BAT - [решено] Анализ на количество символов в названии файла/папки

Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:45, 04-10-2011

 

Ветеран


Contributor


Сообщения: 2726
Благодарности: 1696

Профиль | Отправить PM | Цитировать


Цитата:
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
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 04-10-2011 в 15:13.


Отправлено: 14:51, 04-10-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Moderator


Сообщения: 53456
Благодарности: 15500

Профиль | Отправить PM | Цитировать


айкот, как-то так:
Код: Выделить весь код
@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
)

Отправлено: 14:52, 04-10-2011 | #3


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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 ) »
Такой командой лог файл создается но никакого копирования не происходит

Отправлено: 14:58, 04-10-2011 | #4


Ветеран


Contributor


Сообщения: 2726
Благодарности: 1696

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 04-10-2011 в 15:24.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:17, 04-10-2011 | #5



Moderator


Сообщения: 53456
Благодарности: 15500

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:18, 04-10-2011 | #6


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

the syntax of the command is incorrect

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

Отправлено: 15:25, 04-10-2011 | #7


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата 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, для себя почерпнул чего то новое.

Отправлено: 15:34, 04-10-2011 | #8


Ветеран


Contributor


Сообщения: 2726
Благодарности: 1696

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@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
)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 04-10-2011 в 16:19.


Отправлено: 16:12, 04-10-2011 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Анализ на количество символов в названии файла/папки

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Как удалить все папки кроме папок с названием длиной в 14 символов? yaoleg2 Скриптовые языки администрирования Windows 9 26-03-2011 03:49
CMD/BAT - [решено] Как с помощью батника узнать, используется ли в названии файла\папки кириллица? Nun-Nun Скриптовые языки администрирования Windows 4 28-10-2010 11:44
CMD/BAT - [решено] Как в CMD задать названию папки неопределенную последовательность символов? Rico Скриптовые языки администрирования Windows 4 25-01-2010 08:16
C/C++ - посчитать количество символов без пробела ShadowMas Программирование и базы данных 5 07-05-2009 10:51
[Python] Как получить количество связей у файла? Saigono_Daitoryo Программирование в *nix 1 17-02-2009 21:47




 
Переход