Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 22.04.2020
Сообщений: 15

Обработка файлов в цикле For

27.05.2021, 15:48. Показов 1060. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть простой скрипт который использует утилиту от LibreOffice для конвертации файлов XLSX в XLS.
Надо натравить на папку, рекурсивно обработать и поместить дубликат в туже папку что оригинал.
А оригинал собрать в одну конкретную папку в системе, но я полагаю будет достаточно добавить в цикл
Windows Batch file
1
mv %f "%path%
?

Есть нюанс, когда беру путь с помощью %~dpf его выдет вместе с "" в конце, что наламывает работу утилиты.
По-этому пришел к такому виду

Windows Batch file
1
2
3
4
for /R "%userprofile%\Desktop\Test" %f in ("*.xlsx") do (
    set x=%~dpf
    "C:\Program Files\LibreOffice\program\soffice" --convert-to xls --outdir "%x:~0,-1%" "%f"
)
Но вот проблема. В выводе уже вместо нужного пути, путь к следующей папке.

Windows Batch file
1
2
3
C:\Users\User>(
set x=C:\Users\User\Desktop\Test\
 "C:\Program Files\LibreOffice\program\soffice" --convert-to xls --outdir "[COLOR="Red"]C:\Users\User\Desktop\Test\22[/COLOR]" "C:\Users\User\Desktop\Test\test file.xlsx"
Как добится того что подставлялось нужное значение?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2021, 15:48
Ответы с готовыми решениями:

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

Обработка текстовых файлов. Обработка бинарных файлов. Сериализация и десериализация объектов
Запросить у пользователя необходимость повторения работы программы. В случае если пользователь желает повторить выполнение программы –...

Обработка выполняется очень долго. Обработка файлов
На вход идут данные от 2007 года до сегодня. Просто вывод дат.. очень быстро. Только включаю обработку файла то занимает очень много...

3
6973 / 2866 / 1101
Регистрация: 06.06.2017
Сообщений: 9,739
27.05.2021, 21:21
Windows Batch file
1
2
3
4
5
@setlocal enabledelayedexpansion
@for /r "%userprofile%\Desktop\Test" %%f in (*.xlsx) do @(
    set "x=%%~dpf"
    "C:\Program Files\LibreOffice\program\soffice" --convert-to xls --outdir "!x:~,-1!" "%%f"
)
1
0 / 0 / 0
Регистрация: 22.04.2020
Сообщений: 15
28.05.2021, 10:22  [ТС]
Спасибо, это работает.
Довел до следующего вида.

Windows Batch file
1
2
3
4
5
6
7
8
@echo off
IF exist %userprofile%\Documents\XLSX_backup ( echo 1 ) ELSE ( mkdir %userprofile%\Documents\XLSX_backup && echo 0)
@setlocal enabledelayedexpansion
@for /r "%userprofile%" %%f in (*.xlsx) do @(
    set "x=%%~dpf"
    "C:\Program Files\LibreOffice\program\soffice" --convert-to xls --outdir "!x:~,-1!" "%%f"
move "%%f" "%userprofile%\Documents\XLSX_backup"
)
И появился еще один нюанс.
Скрипт будет лопатить весь юзер профайл и скидывать оригиналы файлов в одну папку.
Но вот рекурсия в конце перелопатит ту же папку. Вынести её из профиля юзера нельзя.
Как сделать исключение на эту папку в цикле for /r ?
0
6973 / 2866 / 1101
Регистрация: 06.06.2017
Сообщений: 9,739
28.05.2021, 13:49
daredevil739, а оригиналы никогда не совпадут в именах?
Windows Batch file
1
2
3
4
5
6
7
8
@set "d="%userprofile%\Documents\XLSX_backup""
@if not exist %d% md %d%
@setlocal enabledelayedexpansion
@for /r "%userprofile%" %%f in (*.xlsx) do @(
    set "x=%%~dpf"
    "C:\Program Files\LibreOffice\program\soffice" --convert-to xls --outdir "!x:~,-1!" "%%f"
    if /i "!x!" neq !d! >nul move "%%f" !d!
)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2021, 13:49
Помогаю со студенческими работами здесь

Обработка checkBox-ов в цикле
подскажите плиз, какого типа данных имя checkbox'а ну и всех остальных компонентов, ну или подскажите реализацию, а то я уже запарился. ...

Обработка переменных в цикле.
Есть список переменных которые нужно обработать. Хочу сделать это в цикле но не получается. <?php // Переменные $a1 = 2; $a2...

Обработка событий в цикле
Здравствуйте! Есть массив параметров ArrayList<int> params = new ArrayList<>(); Есть экземпляр слушателя: ...

Обработка массива в цикле
Здравствуйте! Создал масив ссылок на сайты и нужно проверять их пингом код: set "www=http://cyberforum.ru/...

Обработка исключения в цикле while
В цикле может возникнуть исключение, которое нужно в цикле же обработать и перейти на следующую итерацию этого же цикла. int error = 0; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru