|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке |
|
|
CMD/BAT - [решено] Имя в переменную и запуск приложения для разных файлов в папке
|
Пользователь Сообщения: 60 |
Здравствуйте. Помогите пожалуйста, сам не могу сообразить.
Есть папка с различными файлами, из которой запускается батник, выполняющий программу на работу с файлом *.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
|
Профиль | Отправить PM | Цитировать |
Отправлено: 00:38, 21-05-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2733
|
Профиль | Отправить 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 Ежели всё-таки это необходимо, уберите rem перед move alpap, ИМХО, Вы портите все исходные файлы, там записывается одна строка :Name,Long,Lat вместо исходного контента.
|
------- Отправлено: 11:14, 21-05-2016 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
. |
|
Отправлено: 18:08, 21-05-2016 | #4 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать megaloman, спасибо, все работает как нужно, иногда в файле бывают русские символы, можно перекодировать обрабатываемый файл в utf-8 without BOM? Нашел код, не получается встроить в Ваш скрипт, чтобы все работало вместе.
|
|
Последний раз редактировалось Sta1917, 23-05-2016 в 13:26. Отправлено: 14:19, 22-05-2016 | #5 |
Пользователь Сообщения: 60
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:30, 30-06-2016 | #7 |
Пользователь Сообщения: 60
|
Профиль | Отправить PM | Цитировать Как я понял из wiki PowerShell идет начиная с windows 7, в XP его нужно скачивать и устанавливать. Тогда iconv универсальней (буду носить ее рядом со скриптом). Можно будет запустить на любой машине с windows.
|
Отправлено: 15:01, 01-07-2016 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать «Универсальней» будет использовать WSH, который точно в комплекте, и который носить не надо.
|
Отправлено: 16:34, 01-07-2016 | #9 |
Ветеран Сообщения: 1274
|
Профиль | Отправить 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 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|