CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Аватара пользователя
Sta1917

CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение Sta1917 »

Здравствуйте. Помогите пожалуйста, сам не могу сообразить.

Есть папка с различными файлами, из которой запускается батник, выполняющий программу на работу с файлом *.txt преобразуя его в "txt.kml":



Код:

Код: Выделить всё

"%ProgramFiles(x86)%\GPSBabel\gpsbabel.exe" -w -i unicsv -f "%~dp0*.txt" -o kml -F "%~dp0\txt.kml"

Программа работает если в папке только один файл.

Необходимо написать код со следующими условиями:

1. Добавить в текстовый файл первой строкой текст типа "Name,Long,Lat"

2. Чтобы вместо "txt.kml" было "имя_обрабатываемого_файла.kml"

Опционально:

Если есть такая возможность, запускать этот скрипт для всех txt файлов в папке.
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение alpap »

Сильно не вникая так:



Код:

Код: Выделить всё

@echo off
set "d=C:\papka"
for /f "delims=" %%a in ('dir/a-d/b "%d%\*.txt"') do (
 echo:Name,Long,Lat>"%d%\%%~nxa"
 "%ProgramFiles(x86)%\GPSBabel\gpsbabel.exe" -w -i unicsv -f "%d%\%%~nxa" -o kml -F "%d%\%%~na.kml"
)
exit/b

.
Аватара пользователя
Sta1917

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение Sta1917 »

alpap, при запуске на win7x64 пишет: Convert.cmd (1, 6) Ошибка компиляции Microsoft JScript: Условная компиляция выключена.

Где-то нужно оператор условной компиляции добавить? Причем на win8.1x64 и win10x64 работает
Аватара пользователя
megaloman

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение megaloman »

Цитата megaloman:



там записывается одна строка :Name,Long,Lat вместо исходного контента.
CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке




согласен, невнимательность, 4я строка в моем коде должна быть такой:



Код:

Код: Выделить всё

echo:Name,Long,Lat>$& copy "$"+"%d%\%%~nxa"& move $ "%d%\%%~nxa"

.
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение alpap »

megaloman, спасибо, все работает как нужно, иногда в файле бывают русские символы, можно перекодировать обрабатываемый файл в utf-8 without BOM? Нашел
код
, не получается встроить в Ваш скрипт, чтобы все работало вместе.



Код:

Код: Выделить всё

:: Win-1251 to UTF-8
@chcp 1251>nul
@"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 65001>nul& set x=%%i& cmd/v/c echo[!x:*]^^=!)
Аватара пользователя
Sta1917

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение Sta1917 »

Добавил перекодировку с помощью iconv.



Код:

Код: Выделить всё

@Echo on
:: =========================================
::      смена кодировки cp1251 на utf-8
:: =========================================
:: создаем папку "utf8"
md utf8
:: перекодируем все файлы с расширением *.txt и *.csv,
:: и кладем их в папку "utf8"
:: в папке с программой должна лежать программа iconv
for %%i in (*.txt *.csv) do ".\iconv\iconv" -t UTF-8 "%%i" > "utf8\%%i"
:: =========================================
::              перевод в *kml
:: =========================================
:: определяем разрядность системы (определяем наличие GPSBabel в установленных программах)
If Defined ProgramFiles(x86) (
	Set gpsbabel="%ProgramFiles(x86)%\GPSBabel\gpsbabel.exe" -w -i unicsv -f
) Else (
	Set gpsbabel="%ProgramFiles%\GPSBabel\gpsbabel.exe" -w -i unicsv -f
)
:: добавляем во все файлы *.txt в папке utf8 строку "Name,Latitude,Longitude,Description"
:: конвертируем и кладем их в папку с исходными
FOR %%i IN (".\utf8\*.txt") DO (
	>"%0.tmp" Echo Name,Latitude,Longitude,Description
	>>"%0.tmp" Type "%%i"
	%gpsbabel% "%0.tmp" -o kml -F "%%~ni.kml" 
)
del "%0.tmp" 2>nul
:: добавляем во все файлы *.csv в папке utf8 строку "Name;Latitude;Longitude;Description"
:: конвертируем и кладем их в папку с исходными
FOR %%i IN (".\utf8\*.csv") DO (
	>"%0.tmp" Echo Name;Latitude;Longitude;Description
	>>"%0.tmp" Type "%%i"
	%gpsbabel% "%0.tmp" -o kml -F "%%~ni.kml" 
)
del "%0.tmp" 2>nul
:: удаляем каталог utf8
rd /s /q "%~dp0\utf8"
exit/b
Аватара пользователя
Sta1917

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение Sta1917 »

Добавил перекодировку с помощью iconv.



Код:

Код: Выделить всё

@Echo on
:: =========================================
::      смена кодировки cp1251 на utf-8
:: =========================================
:: создаем папку "utf8"
md utf8
:: перекодируем все файлы с расширением *.txt и *.csv,
:: и кладем их в папку "utf8"
:: в папке с программой должна лежать программа iconv
for %%i in (*.txt *.csv) do ".\iconv\iconv" -t UTF-8 "%%i" > "utf8\%%i"
:: =========================================
::              перевод в *kml
:: =========================================
:: определяем разрядность системы (определяем наличие GPSBabel в установленных программах)
If Defined ProgramFiles(x86) (
	Set gpsbabel="%ProgramFiles(x86)%\GPSBabel\gpsbabel.exe" -w -i unicsv -f
) Else (
	Set gpsbabel="%ProgramFiles%\GPSBabel\gpsbabel.exe" -w -i unicsv -f
)
:: добавляем во все файлы *.txt в папке utf8 строку "Name,Latitude,Longitude,Description"
:: конвертируем и кладем их в папку с исходными
FOR %%i IN (".\utf8\*.txt") DO (
	>"%0.tmp" Echo Name,Latitude,Longitude,Description
	>>"%0.tmp" Type "%%i"
	%gpsbabel% "%0.tmp" -o kml -F "%%~ni.kml" 
)
del "%0.tmp" 2>nul
:: добавляем во все файлы *.csv в папке utf8 строку "Name;Latitude;Longitude;Description"
:: конвертируем и кладем их в папку с исходными
FOR %%i IN (".\utf8\*.csv") DO (
	>"%0.tmp" Echo Name;Latitude;Longitude;Description
	>>"%0.tmp" Type "%%i"
	%gpsbabel% "%0.tmp" -o kml -F "%%~ni.kml" 
)
del "%0.tmp" 2>nul
:: удаляем каталог utf8
rd /s /q "%~dp0\utf8"
exit/b
Аватара пользователя
alpap

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение alpap »

Если есть PS, чтобы не качать iconv, можно и так перекодировать:



Код:

Код: Выделить всё

@echo off
pushd "C:\papka"
 for %%a in (*.txt) do powershell /nologo /noprofile /command "get-content -encoding windows-1251 '%%a'|out-file -encoding utf-8 'u_%%a'"
popd
exit

.
Аватара пользователя
Sta1917

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение Sta1917 »

Как я понял из wiki PowerShell идет начиная с windows 7, в XP его нужно скачивать и устанавливать. Тогда iconv универсальней (буду носить ее рядом со скриптом). Можно будет запустить на любой машине с windows.
Аватара пользователя
Sta1917

Re: CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Сообщение Sta1917 »

«Универсальней» будет использовать WSH, который точно в комплекте, и который носить не надо.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»