укажите порядок сортировки в «copy / b * .dat foo» в Windows cmd

2

Обычно, когда я делаю copy /b *.data fooв Windows cmd, *.dataфайлы в порядке сортировки помещаются в конечный файл foo. Это соответствует моему желаемому поведению.

Однако я только что встретил любопытный каталог, в который эта copy /bкоманда будет копировать файлы не по порядку. Порядок не является абсолютно случайным, но второй последний файл в отсортированном порядке будет идти первым, а затем остальные файлы в отсортированном порядке.

Есть ли способ преодолеть это странное поведение сортировки? В целом, что если я захочу скопировать файлы, скажем, в обратном порядке?

maverickwoo
источник
Как называется странный файл?
Джоэл Коухорн
@Joel Имена файлов - это просто nnnnnnnn.data, где n - это цифра, а числа идут последовательно, начиная с 1. Нечетный файл всегда является вторым последним файлом в отсортированном порядке. Скажем, если у меня есть 5 файлов, сначала выйдет 00000004.data.
Maverickwoo

Ответы:

2

Это объединит файлы ( даже с пробелами ) в обратном порядке:

C:\> for /f "tokens=*" %i in ('dir /a-d /o-n /b c:\some_dir\*') do @type %i >> c:\another_dir\dest.dat

Если файлов всего несколько, вы можете указать их явно:

C:\> copy /b c.dat+a.dat+b.dat dest.dat

Нечто подобное может работать в некоторых ситуациях:

C:\> copy /b file*.dat+foo.dat+bar*.dat dest.dat
Деннис Уильямсон
источник
Я должен научиться печатать быстрее! Что сказал Деннис Хотя type (или более) будет делать только ASCII-копирование, а copy / b является двоичным.
Рис Гибсон
@Rhys: я только что протестировал typeс бинарными файлами, и он работал отлично.
Деннис Уильямсон
Спасибо. Я также с подозрением относился к вводу двоичного файла, но, по-видимому, он работает, как и ожидалось, на моей машине с Windows 7.
Maverickwoo
Отлично. Я стою исправлено.
Рис Гибсон
Обратите внимание, что %необходимо экранировать как %%в .batфайле.
Сис Тиммерман