Поиск файла по введенному имени
Помогите написать bat-файл, с поиском файлов такого вида *xxx*, (rt555.zip или acty555.pdf)
где * - возможны любые символы
ХХХ - цифры, которые обьединяют все эти файлы, но их нужно ввести с клавиатуры, они каждый раз разные
и с последующим их копированием
вот начал:
Цитата:
@Echo off
Set FDir="D:\AST"
set /P Maska="В ведите номер: "
FOR /R %FDir% %%i IN (%Maska%) DO Set FileName="%%i"
Echo %FileName%
set /p answer=Копируем на FTP(Y/N)?
if /i '%answer%'=='Y'
..
else
..
|
не получаться, не ищет
|
Код:
set /p sDigits=Enter digits for mask:
if defined sDigits (
for /f "delims=" %%i in ('dir /s /a "d:\ast\*%sDigits%*.*"') do echo %%i
)
|
Iska, спасибо, работает, а можно вывод (echo %%i) сократить до даты и имя файла
|
Ceval, это я ошибся. Добавьте выделенный параметр в команду: «…('dir /s /b /a "d:\ast\…».
|
и теперь все это дело скопировать, найденные файлы
Цитата:
@Echo off
set Ftp_vl="D:\FTP"
set /p sDigits=Enter digits for mask:
if defined sDigits (
for /f "delims=" %%i in ('dir /s /d /a "e:\ast\*%sDigits%*.*"') do echo %%i)
set /p answer=Љ®ЇЁа㥬 ** FTP(y/n)?
if /i '%answer%'=='y' xcopy /-y "%%i" "%ftp_vl%"
else
quit
|
|
Iska, у меня не сработало при следующих условиях:
- папка e:\Temp 1\1\
- содержимое папки:
Цитата:
2\ (папка)
config
2.reg.bat
num _num.bat
acty555.pdf
1.reg
2.reg
link.txt
new.txt
PuntoSw3_config.txt
Текстовый документ.txt
fname31.xls
fname3.zip
fname555aa1.zip
rt555.zip
|
- маска = 1
|
gora, подтверждаю. Случается, я забываю про такую тонкость, что WinAPI ведёт поиск по маске не только по длинным, но и по коротким именам файлов.
Честно говоря, я не вижу простого выхода в данной ситуации. Возможно, лучшим выходом будет переход к использованию PowerShell:
Код:
$sMask = Read-Host -Prompt "Enter mask:"
Get-ChildItem -Path "E:\Temp 1\1" -Recurse -Include "*$sMask*.*"
|
Цитата:
Цитата Iska
не вижу простого выхода в данной ситуации »
|
Можно через findstr
Код:
dir /b /a | findstr "1"
|
Цитата:
Цитата Iska
но и по коротким именам файлов »
|
А я то голову ломал с этой единицей...
Можно попробовать так:
Код:
@Echo off
Setlocal EnableDelayedExpansion
Set FDir=e:\Temp 1\1
Set /P Maska="В ведите номер: "
For /F "tokens=* delims=" %%i In ('Dir /B /A:-D "%FDir%\*.*"') Do (
Set ti=%%~ni
If Not !ti!==!ti:%Maska%=! Echo %%i
)
Pause>Nul
Боюсь, что могут пролезть и файлы с маской в расширении (test.123)
|
Цитата:
Цитата gora
Боюсь, что могут пролезть и файлы с маской в расширении (test.123) »
|
Тогда, чем городить dir на dir'e, проще через where.exe
Код:
@echo off
setlocal
set "rootdir=C:\ABC"
set "mask=*"
set /p mask="Enter search mask: "
for /f "tokens=*" %%i in (' where /r "%rootdir%" *%mask%*.* ') do echo %%i
|
Цитата:
Цитата gora
Боюсь, что могут пролезть и файлы с маской в расширении (test.123) »
|
Угу (в принципе, расширение можно попытаться отсечь по точке. Но что делать, если точка есть и в имени?). И в самом пути, если с «dir /s …».
Foreigner, работает.
|
А как теперь эти файлы скопировать:
Цитата:
@Echo off
set Ftp_vl="D:\FTP"
set /p sDigits=Enter digits for mask:
if defined sDigits (
for /f "delims=" %%i in ('dir /s /d /a "e:\ast\*%sDigits%*.*"') do echo %%i)
...
xcopy /-y "%%i" "%ftp_vl%"
...
|
выдает ошибку
Цитата:
E:\tets\123>10.bat
ast559.pdf ast559.xls
2 файлов 84*386 байт
Всего файлов:
2 файлов 84*386 байт
Не найден файл: %i
Скопировано файлов: 0.
|
|
Цитата:
Цитата Ceval
А как теперь эти файлы скопировать »
|
Код:
@Echo off
Setlocal EnableDelayedExpansion
Set FDir=e:\Temp\1
Set Ftp_vl=e:\Temp\FTP
If Not Exist "%Ftp_vl%" MD "%Ftp_vl%"
Set /P Maska="В ведите номер: "
If Defined Maska (
For /F "tokens=* delims=" %%i In ('Dir /B /A:-D "%FDir%\*.*"') Do (
Set ti=%%~ni
If Not !ti!==!ti:%Maska%=! (
Echo %%i
Copy "%FDir%\%%~i" "%Ftp_vl%">Nul
)
)
)
Pause>Nul
|
gora, спасибо, мне б что-то в таком плане
Цитата:
@Echo off
set Ftp_vl="D:\FTP"
set /p mask=Enter digits for mask:
if defined sDigits (
for /f "delims=" %%i in ('dir /s /d /a "e:\ast\rt*%mask*.*"') do echo %%i)
set /p answer= Скопировать (y/n)?
if /i '%answer%'=='y' xcopy /-y "%%i" "%ftp_vl%"
else
exit
|
|
HTML код:
.... ...
for /f "delims=" %%i in ('dir /b /s "D:\%mask_vl%\result_%mask%.zip"') do xcopy /y "%%i" "X:!Результаты"
... . ..
заменяешь на другую, все прекрасно копируется
И подскажите как еще можно реализовать запись всех действий (там будет и ввод команд в консоль, и несколько копирований и перемещений ) в лог файл, что-то вроде этого:
set $log=D:\copyfile.log
начало записи лог файла
.... ввод команд в консоль
..... копирование ......
ввод команд ......
...... перемещения .....
конец записи в лог-файл
|
Время: 08:32.
© OSzone.net 2001-