Показать полную графическую версию : Нужен список файлов с именами в 8 знаков. Dir ????????.TXT выдает все .
vangogru
07-08-2012, 09:03
Нужен список файлов с именами в 8 знаков. Dir ????????.TXT выдает все .
wmic.exe DataFile where "Drive='c:' and Path='\\Some\\Path\\' and Extension='txt' and FileName like '________'" get Name
vangogru
07-08-2012, 11:17
А без WMIC можно. Запуск батника не по админом будет.
dir /b *.txt|findstr.exe /r /c:"^........\.txt$"
vangogru
07-08-2012, 12:06
Результат не тот что надо. Файлы меньше 8 знаков в имени тоже попадают.
@echo off
setlocal enableextensions enabledelayedexpansion
for /l %%i in (0,1,9) do (
set sName=!sName!%%i
>nul copy nul !sName!.txt
)
dir /b *.txt
echo.
dir /b *.txt|findstr.exe /r /c:"^........\.txt$"
endlocal
exit /b 0
C:\Песочница\0017>0002.cmd
0.txt
01.txt
012.txt
0123.txt
01234.txt
012345.txt
0123456.txt
01234567.txt
012345678.txt
0123456789.txt
01234567.txt
У меня, как видите, не попадают. Что не так?
vangogru
07-08-2012, 13:22
Нужны файлы только с 8 знаками в имени не больше не меньше.
работает только в тек каталоге, а если dir /s выдает все подряд.
Вообщем задача была такая. Поиск текстовых файлов по по всему диску с: имена 8 знаков и копирование их в определенную папку на диск D:. Далее имеется файл со списком имен текстовых файлов. нужно их найти на диске с: и удалить.
vangogru, видите, насколько важно формулировать полное ТЗ с самого начала, а не вспоминать об этом в середине обсуждения.
vangogru, попробуйте такого уродливого монстра для отбора:
dir /b /s *.txt|findstr.exe /v /r /c:"^.*\\\\.......\.txt$" /c:"^.*\\.\\......\.txt$" /c:"^.*\\..\\.....\.txt$" /c:"^.*\\...\\....\.txt$" /c:"^.*\\....\\...\.txt$" /c:"^.*\\.....\\..\.txt$" /c:"^.*\\......\\.\.txt$" /c:"^.*\\.......\\\.txt$"|findstr.exe /r /c:"^.*\\........\.txt$"
Потом попробуйте попроще:
dir /b /s *.txt|findstr.exe /r /c:"^.*\\[^\\][^\\][^\\][^\\][^\\][^\\][^\\][^\\]\.txt$"
megaloman
07-08-2012, 20:45
Iska, Вот еще один рабочий монстр@Echo Off
Set Where=E:\*.bmp
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion
FOR /F "usebackq delims=" %%f IN (`dir "%Where%" /s /b /A:-D`) DO (
Set fname=%%~nf
Set ff=!fname!12345678
Set ff=!ff:~0,8!
If !ff!==!fname! @Echo %%f
)vangogru, Вместо @Echo %%f Вы вольны нарисовать любую команду (Copy, Move ...)
kiripanda
07-08-2012, 21:56
@echo off
set Where=z:\*.txt
for /f "delims=" %%f in ('dir "%Where%" /b/a-d/on/s') do (
echo %%~nf|findstr /rc:"^........$" >nul &&echo "%%f"
)
megaloman, неплохо (только лишний пробел при echo затесался ;)). Я всё порывался длину имени считать.
kiripanda, я тоже так пробовал, но перемудрил со скобками, нагромождая их равно Пелион на Оссу, и в итоге у меня, увы, ничего из этого не вышло.
А мой код в #9 (http://forum.oszone.net/post-1966301-9.html), к сожалению, некорректен — исключает некоторые файлы, которые должны были входить в набор. Жаль, что в «findstr.exe» нет возможности альтернатив в шаблоне.
vangogru
08-08-2012, 06:39
Поиск по 8 знаком работает, однако &&echo "%%f" попадает имя файла с полным путем хотя и стоит dir /b
vangogru
08-08-2012, 07:05
что получилось
set Where=c:\*.txt
@ (if not exist "d:\text" md "d:\text")
for /f "delims=" %%f in ('dir "%Where%" /b /a-d /on /s') do (
copy %%~nf|findstr /rc:"^........$" d:\text\%%f
)
для copy попадает имя файла без расширения, а в каталог назначения имя файла с полным путем источника.
Заработало
set Where=c:\*.txt
@ (if not exist "d:\text" md "d:\text")
for /f "delims=" %%f in ('dir "%Where%" /b /a-d /on /s') do (
echo %%~nf|findstr /rc:"^........$" &© %%f d:\text\
)
vangogru, Вы-таки определитесь, что Вам нужно: последний раз речь шла как раз о рекурсивном поиске (возвращающем полные пути):
работает только в тек каталоге, а если dir /s выдает все подряд. »
;).
Код оформляется тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code).
kiripanda
08-08-2012, 18:48
vangogru
...
echo %%~nf|findstr /rc:"^........$" >nul &© "%%f" d:\text\
PS
Where лучше взять в кавычки
set "Where=c:\*.txt"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.