Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

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

Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


Здравствуйте. Помогите пожалуйста, сам не могу сообразить.
Есть папка с различными файлами, из которой запускается батник, выполняющий программу на работу с файлом *.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 файлов в папке.

Отправлено: 23:16, 20-05-2016

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Сильно не вникая так:
Код: Выделить весь код
@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
.

Отправлено: 00:38, 21-05-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Ветеран


Contributor


Сообщения: 2733
Благодарности: 1698

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@Echo Off

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
)

FOR %%i IN (*.txt) DO (
	>"%0.tmp" Echo Name,Long,Lat
	>>"%0.tmp" Type "%%i"
	rem move "%0.tmp" "%%i" >nul
	%gpsbabel% "%0.tmp" -o kml -F "%%~ni.kml" 
)
del "%0.tmp" 2>nul
Я посчитал, что исходные файлы изменять нельзя, поэтому не вставлял в исходные файлы первой строкой текст типа "Name,Long,Lat", однако при обработке эта строка присутствует в обрабатываемом файле.
Ежели всё-таки это необходимо, уберите rem перед move

alpap,
ИМХО, Вы портите все исходные файлы, там записывается одна строка :Name,Long,Lat вместо исходного контента.
Код: Выделить весь код
@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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:14, 21-05-2016 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата megaloman:
там записывается одна строка :Name,Long,Lat вместо исходного контента. »
согласен, невнимательность, 4я строка в моем коде должна быть такой:
Код: Выделить весь код
echo:Name,Long,Lat>$& copy "$"+"%d%\%%~nxa"& move $ "%d%\%%~nxa"
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:08, 21-05-2016 | #4


Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


megaloman, спасибо, все работает как нужно, иногда в файле бывают русские символы, можно перекодировать обрабатываемый файл в utf-8 without BOM? Нашел код, не получается встроить в Ваш скрипт, чтобы все работало вместе.
Код: Выделить весь код
:: Win-1251 to UTF-8
@chcp 1251>nul
@<"in.file">"out.file" (for /f "delims=" %%i in ('find/n /v ""') do @chcp 65001>nul& set x=%%i& cmd/v/c echo[!x:*]^^=!)

Последний раз редактировалось Sta1917, 23-05-2016 в 13:26.


Отправлено: 14:19, 22-05-2016 | #5


Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


Добавил перекодировку с помощью 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

Отправлено: 14:03, 30-06-2016 | #6


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Если есть 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
.

Отправлено: 22:30, 30-06-2016 | #7


Пользователь


Сообщения: 60
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 15:01, 01-07-2016 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 16:34, 01-07-2016 | #9


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Ну да:
Код: Выделить весь код
@set @x=0; /*
@echo off
call :Recode "file_in.txt" "file_out.txt" windows-1251 utf-8
exit
 
:Recode [исходный файл] [результирующий файл] [кодировка исходного файла] [кодировка результирующего файла]
  cscript.exe //nologo //e:jscript "%~f0" "%~1" "%~2" "%~3" "%~4"
exit/b
 
*/with (new ActiveXObject('ADODB.Stream')) {
  Charset = WScript.Arguments(2);
  Open();
  LoadFromFile (WScript.Arguments(0));
  Text = ReadText();
  Close();
  Charset = WScript.Arguments(3);
  Open();
  WriteText (Text);
  SaveToFile (WScript.Arguments(1), 2);
  Close();
}
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:25, 01-07-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Запуск RDP сеансов для разных пользователей с сохраненным паролем alef2474 Windows Server 2008/2008 R2 6 02-08-2016 05:46
CMD/BAT - [решено] Удаление msi приложения когда GUID не известен, а известно имя приложения Anton04 Скриптовые языки администрирования Windows 4 22-07-2014 09:20
Доступ - [решено] Запуск консоли управления компьютером для разных компьютеров serg33 Microsoft Windows 2000/XP 3 30-11-2010 15:57
Windows XP Привязать запуск приложения к определенному типу файлов через реестр. babki Microsoft Windows NT/2000/2003 1 12-12-2008 14:36
запуск разных программ для разных пользователей при загрузке schumi Microsoft Windows 2000/XP 2 06-01-2006 22:36




 
Переход