2

Большое спасибо за помощь, но ...

Использование команды запуска Windows 7 x64 из командного файла в определенной папке

Я использую много компрессоров командной строки paq8/paq9 для резервного копирования моих файлов. Многие из них не могут читать структуры каталогов, поэтому отдельные имена файлов должны быть включены в определенный однострочный синтаксис. Я могу получить список файлов из текстового файла из определенного каталога, но они, естественно, в одиночном. Мне нужно создать текстовый файл, который будет давать содержимое, но все в 1 строку, разделенные пробелом. Моя партия здесь:

dir /a /b /-p /o:gen>% USERPROFILE%\Desktop\file_list_full.txt

Я хочу иметь возможность вставить эту строку в пакетный файл в ЛЮБОЙ папке и просто запустить его, чтобы создать текстовый список содержимого папки

Как пример, это даст:

Hello.exe

Help.txt

Big.png

sound.ogg

Мне нужно, чтобы это было:

Hello.exe Help.txt Big.png sound.ogg

Пример структуры сжатия paq и того, почему это нужно делать, особенно если в папке может быть пара сотен файлов !!

paq9a a Archive.paq9a -8 -c feasting.exe License.txt INFO.txt data.win D3DX9_43.dll data.big dbr.ut

Как я могу это сделать?

Если я оставлю текстовый файл, чтобы создать как есть. Есть ли способ заменить "новую строку" на "пробел", чтобы получить требуемый результат?

3 ответа3

2

Я думаю, что вы можете широкоформатный вывод, попробуйте /w

Этот параметр несовместим с /B поэтому используйте findstr для фильтрации заголовков и сводок.

 C:> dir /a-d /w | findstr /B [a-zA-Z0-9]
 Big.png     Hello.exe   Help.txt    sound.ogg

Предостережение: выше проверено на Win7. Похоже, у вас другой O/S.


Если у вас много привередливых требований, вам может понадобиться вынести большой молоток. Мне нравится Perl, но ваш пробег может отличаться.

C:> perl -e "print join ' ', glob('*')"
Big.png Hello.exe Help.txt sound.ogg
0

dir /a /b /-p /o:gen>% USERPROFILE%\Desktop\file_list_full.txt /w

для "широкого"

Если вы зациклились на пробелах, имея в виду истинное значение ANSI/Ascii, я бы передал команду через GSAR с поиском / заменой.

Сбросьте параметр окна cmd по умолчанию на нечестивое значение, такое как "9999" для всей вашей системы или конкретной инструкции, и вы получите возврат длинной строки без переноса.

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

0

Альтернатива «чистой» строке cmd (которая может оказаться полезной, если вам нужны списки «ad hoc»):
Win explorer позволяет добавить несколько приложений в приложение - в частности, пакетный файл.

Простой пример - создайте командный файл со следующим содержимым:

@echo off
echo %*
pause

затем откройте окно проводника, чтобы оно было видимым, и поместите на него несколько выбранных файлов. Он просто перечислит их (и сделает паузу, чтобы вы могли читать), но добавит перенаправление, и ваш список будет сохранен в файл, или заменит echo вашей командой компрессора, и он будет работать в списке.

обновление: чтобы получить только имена файлов

@echo off
setlocal

:loop
  if [%1]==[] goto end
  set arg=%arg% "%~nx1"
  shift
  goto loop

:end
echo %arg%
pause

Все еще ограничено максимальной длиной cmd (8192), как я обрисовал в своем связанном ответе

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .