Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Нужен список файлов с именами в 8 знаков. Dir ????????.TXT выдает все . (http://forum.oszone.net/showthread.php?t=240111)

vangogru 07-08-2012 09:03 1965973

Нужен список файлов с именами в 8 знаков. Dir ????????.TXT выдает все .
 
Нужен список файлов с именами в 8 знаков. Dir ????????.TXT выдает все .

Iska 07-08-2012 10:52 1966068

Код:

wmic.exe DataFile where "Drive='c:' and Path='\\Some\\Path\\' and Extension='txt' and FileName like '________'" get Name

vangogru 07-08-2012 11:17 1966090

А без WMIC можно. Запуск батника не по админом будет.

Iska 07-08-2012 11:35 1966104

Код:

dir /b *.txt|findstr.exe /r /c:"^........\.txt$"

vangogru 07-08-2012 12:06 1966124

Результат не тот что надо. Файлы меньше 8 знаков в имени тоже попадают.

Iska 07-08-2012 12:57 1966157

↧ Демонстрация ↧
Код:

@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 1966175

Нужны файлы только с 8 знаками в имени не больше не меньше.

работает только в тек каталоге, а если dir /s выдает все подряд.

Вообщем задача была такая. Поиск текстовых файлов по по всему диску с: имена 8 знаков и копирование их в определенную папку на диск D:. Далее имеется файл со списком имен текстовых файлов. нужно их найти на диске с: и удалить.

Iska 07-08-2012 13:42 1966193

vangogru, видите, насколько важно формулировать полное ТЗ с самого начала, а не вспоминать об этом в середине обсуждения.

Iska 07-08-2012 16:43 1966301

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 1966433

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 1966474

Код:

@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"
)


Iska 08-08-2012 02:07 1966582

megaloman, неплохо (только лишний пробел при echo затесался ;)). Я всё порывался длину имени считать.

kiripanda, я тоже так пробовал, но перемудрил со скобками, нагромождая их равно Пелион на Оссу, и в итоге у меня, увы, ничего из этого не вышло.

А мой код в #9, к сожалению, некорректен — исключает некоторые файлы, которые должны были входить в набор. Жаль, что в «findstr.exe» нет возможности альтернатив в шаблоне.

vangogru 08-08-2012 06:39 1966606

Поиск по 8 знаком работает, однако &&echo "%%f" попадает имя файла с полным путем хотя и стоит dir /b

vangogru 08-08-2012 07:05 1966609

что получилось
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:"^........$" &&copy %%f d:\text\
)

Iska 08-08-2012 07:14 1966612

vangogru, Вы-таки определитесь, что Вам нужно: последний раз речь шла как раз о рекурсивном поиске (возвращающем полные пути):
Цитата:

Цитата vangogru
работает только в тек каталоге, а если dir /s выдает все подряд. »

;).

Код оформляется тэгом [code].

kiripanda 08-08-2012 18:48 1966959

vangogru
...
echo %%~nf|findstr /rc:"^........$" >nul &&copy "%%f" d:\text\

PS
Where лучше взять в кавычки
set "Where=c:\*.txt"


Время: 09:04.

Время: 09:04.
© OSzone.net 2001-