@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q56588370.txt"
SET "outfile=%destdir%\outfile.txt"
SET "sortfile=%destdir%\sortfile.txt"
SET /a sortcol=3
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
rem full line in %%a
SET "fullline=%%a"
CALL :sub %%a
)
)>"%sortfile%"
(
FOR /f "tokens=1*delims=+" %%a IN (' sort "%sortfile%"') DO (
ECHO %%b
)
)>"%outfile%"
DEL "%sortfile%"
GOTO :EOF
:sub
IF %sortcol% neq 1 FOR /L %%z IN (2,1,%sortcol%) DO SHIFT
ECHO %1+%fullline%
GOTO :eof
Вам необходимо изменить настройки sourcedir
и destdir
в соответствии с вашими обстоятельствами.
Я использовал файл с именем q56588370.txt
, содержащий некоторые фиктивные данные для моего тестирования.
Создает файл, определенный как %outfile%
. %sortfile%
- это просто временный файл с любым именем в разумных пределах.
Извлеките каждую строку вашего файла и назначьте его содержимое переменной fullline
, затем выполните подпрограмму :sub
для каждой строки, передав в качестве параметра всю строку. Поскольку каждая строка должна представлять собой список элементов, разделенных запятыми, который может быть либо строкой в кавычках, либо строкой, которая не содержит пробелов или запятых, она может быть декодирована подпрограммой, поэтому все, что требуется, это shift
параметр-list (columnrequired - 1) раз, а необходимые данные сортировки находятся в %1
.
output %1
, за которым следует разделитель и вся первоначально прочитанная строка (заключив в скобки серию операторов и перенаправляя, данные, которые обычно отображаются на экране, в место назначения перенаправления) во временный файл, сортируют и удаляют данные добавляется к каждой строке с использованием выбранного разделителя.
Таким образом, можно выбрать более одного столбца и обрабатывать данные по мере необходимости - например, локальные «почтовые индексы» состоят из 4 цифр (которые могут начинаться 0
) и других стран. использовать другие форматы или когда-либо популярный код расширения, который может быть применен к ZIP, могут быть записаны и обработаны.
Вот мои тестовые данные:
"John","Doe","12345","moredata 1"
"John","Do, or not","12345","moredata 2"
"John","Doe 4","12344","moredata 3"
"John","Doe 5","12345","moredata 4"
"John","Doe 6","12345","moredata 5"
"John","Doe 7","12344","moredata 6"
и вывод:
"John","Doe 4","12344","moredata 3"
"John","Doe 7","12344","moredata 6"
"John","Do, or not","12345","moredata 2"
"John","Doe 5","12345","moredata 4"
"John","Doe 6","12345","moredata 5"
"John","Doe","12345","moredata 1"