Войти

Показать полную графическую версию : Использование файла с русскими символами в .bat


vdvas
07-06-2019, 22:14
Здравствуйте.
Взял два скрипта с этого сайта, для бэкапа revit server.
https://ecognosci.wordpress.com/2014/12/30/a-practical-guide-to-backing-up-revit-server-models/
Смысл первого скрипта в том что он записывает в текстовый файл все пути к директориям, обрезает определенное количество первых символов и удаляет пробел. После этого вызывает второй скрипт который использует как аргумент строки из текстового файла.
Ниже мои версии скриптов.
Проблема в том что при вызове команды
"C:\Program Files\Autodesk\Revit Server 2015\Tools\RevitServerToolCommand\revitservertool.exe" createLocalRVT %1 -s server -d %bakdst% -o
появляются кракозябры и ничего не работает.
Сами скрипты имеют кодировку oem 866.
Может надо перекодировать получившийся файл RS2016Projectlist.txt в другую кодировку? Кодировка этого файла ANSI.
listing.bat

chcp 1251
set listfile=c:\share\RS2016Projectlist.txt
set backupscript=c:\script\RS2016Backup.cmd
set revitserverprojectpath=D:\Revit Server 2018\Projects
if exist %listfile% del %listfile% /q/f
for /R "%revitserverprojectpath%" %%f in (*.rvt) do (
set tmp=%%~pf
setlocal enableDelayedExpansion

rem The first 49 characters are truncated to remove the absolute path, and the
rem trailing slash is removed.

echo !tmp:~28,-1! >> %listfile%
endlocal
)
rem replace the trailing space
CScript //H:CScript
cscript “replacetext.vbs” “%listfile%” “.rvt ” “.rvt” /I

rem now parse through Revit model list and run backup script
for /f "eol=; tokens=* delims=" %%1 in (c:\share\RS2016Projectlist.txt) do c:\share\revit_server_bak.cmd "%%1"


replacetext.vbs

‘Replace Text

‘This script should be placed in a folder specified in your system’s PATH variable.

‘Usage (WScript):
‘ReplaceText FileName OldText NewText [/I]

‘ /I (optional) – Text matching is not case sensitive

Set oArgs = WScript.Arguments

intCaseSensitive = 0
For i = 3 to oArgs.Count-1
If UCase(oArgs(i)) = “/I” Then intCaseSensitive = 1
Next

Set oFSO = CreateObject(“Scripting.FileSystemObject”)

If Not oFSO.FileExists(oArgs(0)) Then
WScript.Echo “Specified file does not exist.”
Else
Set oFile = oFSO.OpenTextFile(oArgs(0), 1)
strText = oFile.ReadAll
oFile.Close
strText = Replace(strText, oArgs(1), oArgs(2), 1, -1, intCaseSensitive)

Set oFile = oFSO.OpenTextFile(oArgs(0), 2)
oFile.WriteLine strText
oFile.Close
End If


revit_server_bak.cmd

chcp 1251
rem remove quotes fed by parse command and concatenate new UNC target path
set badpath=%1
set rvtroot=%badpath:~1,-1%
set unctarget=\\filesrv\share
set bakdst=”%unctarget%%rvtroot%”
rem use createlocalRVT tool to backup to network location
"C:\Program Files\Autodesk\Revit Server 2015\Tools\RevitServerToolCommand\revitservertool.exe" createLocalRVT %1 -s server -d %bakdst% -o

alpap
08-06-2019, 22:35
скрипты имеют кодировку oem 866 »
...Кодировка этого файла ANSI »
а должна быть тоже OEM 866.

mwz
08-06-2019, 22:59
alpap, я вот всё с сомнением смотрю на строки
chcp 1251 »Старею видать...

vdvas
10-06-2019, 17:11
В консоли кракозябы но создаваемые файлы и аппки нормально по русски отображает.
Мне этого достаточно. Кракозябы в консоли не сильно критичны.

megaloman
10-06-2019, 21:10
vdvas, c:\share\RS2016Projectlist.txt » Предоставьте, пожалуйста, этот файл живьем, тыкать пальцем в небо можно долго.

Sham
11-06-2019, 08:27
OpenTextFile (https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/windows-scripting/314cz14s%28v%3dvs.84%29#syntax) по умолчанию ASCII. ANSI видимо -2 (4 параметр)

Iska
13-06-2019, 23:26
ANSI видимо -2 (4 параметр) »
Нет, ANSI — это как раз «omitted» или же TristateFalse = 0. А TristateUseDefault = -2 даёт достаточно своеобразный эффект. Например:
Option Explicit

' IOMode Enum
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

' Format Enum
Const TristateUseDefault = -2
Const TristateTrue = -1
Const TristateFalse = 0


Dim strFile

With WScript.CreateObject("Scripting.FileSystemObject")
For Each strFile In Array("ANSI-1251.txt", "UTF-16LE-1200.txt", "UTF-16LE-1200 BOM.txt")
WScript.Echo strFile

With .OpenTextFile(strFile)
WScript.Echo .ReadAll()
.Close
End With

With .OpenTextFile(strFile, ForReading, False, TristateUseDefault)
WScript.Echo .ReadAll()
.Close
WScript.Echo
End With
Next
End With

WScript.Quit 0

https://i.imgur.com/KKZeSSI.png




© OSzone.net 2001-2012