Я не могу поверить, что copy
изменила бы порядок сортировки объединенных файлов. Однако следующий скрипт self_explaining может помочь:
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
pushd d:\bat\files\folder
REM echo(&echo SHOW files to be merged in different sort order
REM erase newfile.txt 2>NUL
REM @ECHO ON
REM @for %%G in (
REM "/-C" "/O:N" "/O:S" "/O:E" "/O:D /T:C" "/O:D /T:W"
REM ) do dir %%~G *.txt|findstr "\.txt$"
REM @ECHO OFF
echo(&echo RESULT: copy *.txt newfile.txt
erase newfile.txt 2>NUL
rem (optional): to throw away trailing `Ctrl+Z`, use `/B` switch as follows:
rem copy /Y *.txt newfile.txt /B
@ECHO ON
copy /Y *.txt newfile.txt
findstr "^" *.txt
@ECHO OFF
echo(&echo(&echo RESULT: merge *.txt in defined order: change `/O` switch
echo(
type nul> newfile.txt
set /A "_files=0"
for /F "delims=" %%G in ('
dir /B /O:N *.txt
') do @if not "%%G"=="newfile.txt" (
echo(%%~G
set /A "_files+=1"
copy /Y newfile.txt + %%~G newfile.txt /B >NUL
)
echo %_files% file^(s^) merged.
rem (optional): to add trailing `Ctrl+Z`, remove `REM` in next line
REM copy newfile.txt + NUL newfile.txt >NUL
@ECHO ON
findstr "^" *.txt
@ECHO OFF
popd
Обратите внимание, что фрагмент кода с REM
комментариями, следующий за командой pushd
, покажет файлы, которые будут объединены в другом порядке сортировки, если они не закомментированы (все 7 REM
удалены). Я держу это здесь для целей отладки.
Результат:
==> D:\bat\SU\1002948.bat
RESULT: copy *.txt newfile.txt
==> copy /Y *.txt newfile.txt
1.txt
2.txt
3.txt
4.txt
1 file(s) copied.
==> findstr "^" *.txt
1.txt:1111
2.txt:2
3.txt:333
4.txt:44
newfile.txt:1111
newfile.txt:2
newfile.txt:333
newfile.txt:44
newfile.txt:→
RESULT: merge *.txt in defined order: change `/O` switch
1.txt
2.txt
3.txt
4.txt
4 file(s) merged.
==> findstr "^" *.txt
1.txt:1111
2.txt:2
3.txt:333
4.txt:44
newfile.txt:1111
newfile.txt:2
newfile.txt:333
newfile.txt:44
==>
Здесь символ трейлинг →
стрелка вправо в newfile.txt
представляет EOF
(конец файла, шестнадцатеричный 0x1A
), т.е. Ctrl+Z.