Показать полную графическую версию : [решено] Имя в переменную и запуск приложения для разных файлов в папке
Здравствуйте. Помогите пожалуйста, сам не могу сообразить.
Есть папка с различными файлами, из которой запускается батник, выполняющий программу на работу с файлом *.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 файлов в папке.
Сильно не вникая так:
@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
.
megaloman
21-05-2016, 11:14
@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, @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
там записывается одна строка :Name,Long,Lat вместо исходного контента. »
согласен, невнимательность, 4я строка в моем коде должна быть такой:
echo:Name,Long,Lat>$& copy "$"+"%d%\%%~nxa"& move $ "%d%\%%~nxa"
.
megaloman, спасибо, все работает как нужно, иногда в файле бывают русские символы, можно перекодировать обрабатываемый файл в utf-8 without BOM? Нашел код (http://www.cyberforum.ru/post7158106.html), не получается встроить в Ваш скрипт, чтобы все работало вместе.
:: 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:*]^^=!)
Добавил перекодировку с помощью 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
Если есть 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
.
Как я понял из wiki PowerShell идет начиная с windows 7, в XP его нужно скачивать и устанавливать. Тогда iconv универсальней (буду носить ее рядом со скриптом). Можно будет запустить на любой машине с windows.
«Универсальней» будет использовать WSH, который точно в комплекте, и который носить не надо.
Ну да:
@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();
}
.
alpap, при запуске на win7x64 пишет: Convert.cmd (1, 6) Ошибка компиляции Microsoft JScript: Условная компиляция выключена.
Где-то нужно оператор условной компиляции добавить? Причем на win8.1x64 и win10x64 работает
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.