1

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

"001.jpg" "002.jpg" "003.jpg" "004.jpg"

в основном это должно перечислить файлы без разрывов строки. Как я могу сделать это с помощью cmd в Windows 7?

2 ответа2

0
ForEach($_ In Get-ChildItem "C:\Folder\" -Recurse -Directory)
{
    ForEach($file In Get-ChildItem -File $_.FullName)
    {
        [System.IO.File]::AppendAllText("$($_.FullName)\crazyList.txt", "`"$($file.Name)`" ", [System.Text.Encoding]::Unicode)
    }
}

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

0

Вы можете достичь желаемого результата, используя только оболочку CMD, комбинируя forfiles, for и отложенное расширение переменной (см. Также: cmd).

меры

  1. Создайте пакетный файл (например, C:\jpglist.bat) и сохраните в нем следующие инструкции:

    @echo off
    if %2 == FALSE exit
    cd /D %1
    for %%a in (*.jpg) do set list=!list! "%%a"
    echo %list:~1%> jpglist.txt
    
  2. Откройте командную строку.

  3. казнить

    forfiles /P PATH /S /C "cmd /V:on /C C:\jpglist.bat @path @isdir"
    

    где PATH - полный путь к основному каталогу.

  4. Пакетный файл больше не нужен. Удалите его, если хотите.

Как это устроено

Команда:

  • forfiles /P PATH /S /C "..." проходит рекурсивно (/S) через PATH и его подкаталоги и выполняет ... для каждой записи каталога.

  • cmd /V:on /C ... открывает новую оболочку с включенным отложенным расширением переменной (/V:on) и выполняет ...

  • C:\jpglist.bat @path @isdir вызывает пакетный файл и передает полный путь записи в качестве первого параметра.

    @isdir будет TRUE, если @path является каталогом; в противном случае это будет ЛОЖЬ.

Пакетный файл:

  • if %2 == FALSE exit завершается немедленно, если первый аргумент не является каталогом.

  • cd /D %1 изменяется на каталог, указанный в первом аргументе (/D включает переключение дисков в случае необходимости).

  • for %%a in (*.jpg) do set list=!list! "%%a" просматривает все файлы с расширением .jpg и добавляет их имена в список переменных.

    Используя !list! вместо %list% задерживает расширение переменной, т. е. список будет расширяться в каждой итерации, а не только один раз в начале.

  • echo %list:~1%> jpglist.txt записывает содержимое list переменных (кроме первого символа, который будет первым пробелом) в файл с именем jpglist.txt в текущем каталоге.

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