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

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

Ответить
Настройки темы
CMD/BAT - Поиск дублирующихся названий в двух каталогах

Пользователь


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

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


Добрый день!
Необходимо каталогах, которые задаются в качестве параметров скрипта, найти и вывести на экран имена повторяющихся файлов. При этом для проверки наличия файла во втором каталоге необходимо использовать только один оператор For и IF.

Отправлено: 15:09, 26-04-2013

 

Пользователь


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

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


Считает все файлы, кроме скрытых и системных.
Код: Выделить весь код
@echo off
set dir1=C:\
set dir2=D:\
CD /d %dir2%
for /f "tokens=*" %%I IN ('dir /b /a-d-h-s "%dir1%"') DO (
IF EXIST "%%I" echo %%I
)
pause

Отправлено: 21:12, 26-04-2013 | #2



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

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


Пользователь


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

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


Нашел схожий скрипт, но не выходит его изменить под свои нужды:

Код: Выделить весь код
@echo off
for /f "tokens=*" %%i in ('dir /b /a-d "c:\lab2\1"') do if exist "c:\lab2\2\%%~nxi" echo %%~nxi
pause
1. Необходимо задать каталоги, в которых будет производиться поиск, с помощью параметров. Для этого делаю следующее:

Код: Выделить весь код
@echo off
set directum1=c:\lab2\1
set directum2=c:\lab2\2
for /f "tokens=*" %%i in ('dir /b /a-d %directum1%') do if exist %directum2%+%%~nxi echo %%~nxi
pause
Но этот номер не проходит. Как быть?

2. Скрипт выводит только те файлы, у которых совпадает и разрешение и имя, а мне разрешение не важно, главное чтобы имя совпадало. Для этого в %%~nxi убираю х. Но это также не помогает...

Ксеноинженер, мм, а как сделать так, чтобы расширение не учитывалось при поиске?

Отправлено: 21:13, 26-04-2013 | #3


Пользователь


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

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


kelevara, дело в скобках после DO.
Код: Выделить весь код
@echo off
set dir1=C:\
set dir2=D:\
CD /d "%dir2%"
for /f "tokens=*" %%I IN ('dir /b /a-d-h-s "%dir1%"') DO (
IF EXIST "%%~nI" echo %%~nI
)
pause
Вот так сравнивается только имя файла.

Последний раз редактировалось Ксеноинженер, 26-04-2013 в 21:33.


Отправлено: 21:19, 26-04-2013 | #4


Пользователь


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

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


Цитата Ксеноинженер:
kelevara, дело в скобках после DO.
Код:
@echo off
set dir1=C:\
set dir2=D:\
CD /d "%dir2%"
for /f "tokens=*" %%I IN ('dir /b /a-d-h-s "%dir1%"') DO (
IF EXIST "%%~nI" echo %%~nI
)
pause
Вот так сравнивается только имя файла. »
Странно, этот вариант у меня вообще ничего не находит. У меня есть две папки 1 и 2. В папке 1 лежат файлы 1.txt, lab2-1.bat, lab2-2.bat, lab2-3.bat, lab2-4.bat, lab2-5.bat.
В папке 2 лежат файлы 1.bat, lab2-1.bat, lab2-3.bat, lab2-5.bat.
Соответственно, в результате работы программы на экран должен выводится следующий список:
1
lab2-1
lab2-3
lab2-5

К слову, предыдущий вариант скрипта, приведенный во втором сообщении, выводит такой список:
lab2-1.bat
lab2-3.bat
lab2-5.bat

Отправлено: 00:15, 28-04-2013 | #5


Ветеран


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

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


Сообщение удалено автором.

Последний раз редактировалось Georgio, 28-04-2013 в 02:54. Причина: Несоответствие условиям задачи


Отправлено: 01:53, 28-04-2013 | #6


Пользователь


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

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


Цитата kelevara:
Соответственно, в результате работы программы на экран должен выводится следующий список:
1
lab2-1
lab2-3
lab2-5 »


Так?
Код: Выделить весь код
@echo off
set directum1=c:\lab2\1
set directum2=c:\lab2\2
CD /d "%directum2%"
for /f "tokens=*" %%I IN ('dir /b /a-d-h-s "%directum1%"') DO (
IF EXIST %%~nI* echo %%~nI
)
pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:20, 28-04-2013 | #7


Ветеран


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

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


Ксеноинженер, я так тоже пробовал:
Цитата Ксеноинженер:
IF EXIST %%~nI* echo %%~nI »
Точнее, так:
Код: Выделить весь код
IF EXIST %%~nI.* echo %%~nI
Не подходит. Если, например, в %directum2% находится файл lab-2-1.###.bat вместо файла lab2-1.bat, то также будет выведено имя "lab2-1", а оно не должно выводиться, так как файла с таким именем нет.

Последний раз редактировалось Georgio, 28-04-2013 в 10:42. Причина: Уточнение

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

Отправлено: 04:40, 28-04-2013 | #8


Пользователь


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

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


Ксеноинженер, Georgio
Попробую показать вариант, предложенный уважаемым Ксеноинженером. Но проблему, указанную Georgio (тоже кстати не менее уважаемым), также признаю и беру к сведению

Отправлено: 18:49, 28-04-2013 | #9


Пользователь


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

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


Цитата Georgio:
Не подходит. Если, например, в %directum2% находится файл lab-2-1.###.bat вместо файла lab2-1.bat, то также будет выведено имя "lab2-1", а оно не должно выводиться, так как файла с таким именем нет. »
Georgio, Дисциплина задания kelevara не позволяет второго FOR. Если б позволяла, то было б так:
Код: Выделить весь код
@echo off
set directum1=c:\lab2\1
for /f "tokens=*" %%I IN ('dir /b /a-d-h-s "%directum1%"') DO (
echo %%~nI>>"%tmp%\list1.txt"
)
set directum2=c:\lab2\2
for /f "tokens=*" %%I IN ('dir /b /a-d-h-s "%directum2%"') DO (
echo %%~nI>>"%tmp%\list2.txt"
)
findstr /i /x /G:"%tmp%\list1.txt" "%tmp%\list2.txt"
del /q "%tmp%\list1.txt"
del /q "%tmp%\list2.txt"
pause

Отправлено: 17:00, 29-04-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Поиск и проверка сегодняшних файлов в динамических каталогах rudimko Скриптовые языки администрирования Windows 4 10-09-2012 20:55
CMD/BAT - Поиск динамичных названий файлов dj_crazy_joker Скриптовые языки администрирования Windows 11 09-09-2012 01:00
Поиск программы для отслеживания изменений в сетевых каталогах Richmobile Программное обеспечение Windows 0 03-03-2011 08:42
CMD/BAT - CMD-файл, обеспечивающий обмен файлов в двух каталогах stAlexey Скриптовые языки администрирования Windows 5 23-10-2010 19:46




 
Переход