Имена файлов не отсортированы - PullRequest
1 голос
/ 05 апреля 2011
setlocal EnableDelayedExpansion
set "var=xxxxxxxxxxx\"
Test.txt echo !var!
set "var1=$(LOCAL_PATH)/batch/"
set "var2=:/data/local/12m/batch/"
set "var3=$(LOCAL_PATH)/"
set "var4=:/data/local/12m/"

for %%a in (batch/*.bat) do (
    >>Test.txt echo !var1!%%a!var2!%%a \
) 

for %%a in (*.bmp) do (
    >>Test.txt echo !var3!%%a!var4!%%a \
) 

for %%a in (*.wav) do (
    >>Test.txt echo !var3!%%a!var4!%%a \
) 

for %%a in (*.cfg) do (
    >>Test.txt echo !var3!%%a!var4!%%a \
) 

проблема: имена файлов должны быть в отсортированном порядке в Test.txt, но это не так (файлы .bat должны быть в отсортированном порядке, за которыми следуют файлы .bmp в отсортированном порядке и т. Д.). Как это исправить?

Примечание: везде перед Test.txt есть оператор >>, но по какой-то причине этот редактор удалил его ... например, это >> test.txt echo! Var1 "

РЕДАКТИРОВАТЬ по jeb: Вы должны использовать форматирование кода и прочитать справку Как отформатировать справа.

Спасибо SSE @jeb: я заметил, что файлы сортируются, если я запускаю пакетный файл на своем локальном диске / в папке, и файлы не сортируются, если я запускаю пакетный файл на подключенном диске. Мне нужно это, чтобы работать в моем подключенном диске. Копирование содержимого в отдельные выходные файлы для каждого типа файла и последующее копирование всего содержимого в один файл также не сортирует файлы на подключенном диске. Я использую Windows 7. Это проблема Windows 7? Сопоставленный диск - это карта моего локального рабочего пространства на сервере Linux. Я считаю, что это следует за файловой системой ext2.

@ Ниль @ Роберт Харви: Я пытался for /F "delims=" %%a in ('dir /b /on batch\*.bat') do, но он вообще не копирует пакетный файл ... мой выходной файл пуст

Ответы [ 3 ]

1 голос
/ 05 апреля 2011

for не сортирует ваши имена файлов.Вы можете создать (четыре) временных файла, отсортировать результат и вывести его в окончательный файл.Или вы можете использовать расширенный синтаксис for для чтения вывода dir/b/o.

0 голосов
/ 07 апреля 2011
setlocal EnableDelayedExpansion
set "var=xx"
>>Test1.txt echo !var!
set "var1=yy"
set "var2=zz"
set "var3=aaa"
set "var4=bb"
set "var5=cc"

for %%a in (batch/*.bat) do (
>>Test2.txt echo !var1!%%a!var2!%%a \
)
for %%a in (*.bmp) do (
>>Test3.txt echo !var3!%%a!var4!%%a \
)
for %%a in (*.wav) do (
>>Test4.txt echo !var3!%%a!var4!%%a \
) 
for %%a in (*.cfg) do (
>>Test5.txt echo !var3!%%a!var4!%%a \
) 
@echo off
sort Test2.txt>>Test1.txt
sort Test3.txt>>Test1.txt
sort Test4.txt>>Test1.txt
sort Test5.txt>>Test1.txt

setlocal EnableDelayedExpansion
>>Test1.txt echo !var5!

del Test2.txt
del Test3.txt
del Test4.txt
del Test5.txt

Теперь я переписываюсь на пять разных файлов и сортирую каждый файл перед добавлением к первому. Это работает для меня сейчас. Любые предложения по улучшению этого кода приветствуются

0 голосов
/ 05 апреля 2011

Возможно, ваши файлы имеют номера в качестве имен, тогда они также сортируются на основе сравнения строк, они не сортируются по номерам.

Образец. 2 больше 10, так как они сравниваются как строки.
Таким образом, обычный (и правильный) отсортированный список может быть

  • 1
  • 10
  • 12
  • 2
  • 20

Если ваша сортировка не удалась в другой точке, пожалуйста, покажите несколько образцов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...