Gennie
07-05-2009, 17:07
Задача такая. Есть туча файлов в одной директории (много тысяч и каждый день добавляются), они вперемешку, потому что разные названия, но в каждом названии есть дата.
Файлы могут иметь разные даты создания/модификации по сравнению с той датой, что вбита в название каждого из них (это ещё один сюрприз, поэтому не получится просто отсортировать в Проводнике и смотреть в конец списка). Отлавливаю список всех, подгруженных в нужную дату примерно так: dir /b /o:d|findstr /b /i %DID% |findstr %sdate%, где DID - ещё один идентификатор, а sdate - соответствующая форма даты. В результате получается просто список нужных файлов. Которые затем хочется скопировать куда-нибудь в другую директорию, и уже там с ними работать. Потому что даже PgUp - PgDown в той огромной директории нажимать устанешь, не то что мышкой пытаться что-то выловить. Насколько показывает help, команды copy и xcopy не имеют возможностей копировать с консоли, из файла или принимая source как вывод другой команды, переданной через пайплайн. Поэтому конструкции типа C:\tmp\0>dir /b|findstr 45|copy * c:\по ходу будут копировать именно * (т.е. всё как есть из этой директории), а хочется скопировать именно тот список файлов, который был получен после тщательного отбора командой выше. Во всяких юникс-шеллах есть возможность брать информацию прямо из консоли, это обозначается дефисом "-". Но в CMD такая штука не работает. А с командой FOR не очень понятно, потому что она не работает со вложенными пайплайнами, только не с перенаправляемыми командами.
Файлы могут иметь разные даты создания/модификации по сравнению с той датой, что вбита в название каждого из них (это ещё один сюрприз, поэтому не получится просто отсортировать в Проводнике и смотреть в конец списка). Отлавливаю список всех, подгруженных в нужную дату примерно так: dir /b /o:d|findstr /b /i %DID% |findstr %sdate%, где DID - ещё один идентификатор, а sdate - соответствующая форма даты. В результате получается просто список нужных файлов. Которые затем хочется скопировать куда-нибудь в другую директорию, и уже там с ними работать. Потому что даже PgUp - PgDown в той огромной директории нажимать устанешь, не то что мышкой пытаться что-то выловить. Насколько показывает help, команды copy и xcopy не имеют возможностей копировать с консоли, из файла или принимая source как вывод другой команды, переданной через пайплайн. Поэтому конструкции типа C:\tmp\0>dir /b|findstr 45|copy * c:\по ходу будут копировать именно * (т.е. всё как есть из этой директории), а хочется скопировать именно тот список файлов, который был получен после тщательного отбора командой выше. Во всяких юникс-шеллах есть возможность брать информацию прямо из консоли, это обозначается дефисом "-". Но в CMD такая штука не работает. А с командой FOR не очень понятно, потому что она не работает со вложенными пайплайнами, только не с перенаправляемыми командами.