Заменить определенные символы в содержимом файла, используя пакетный файл - PullRequest
0 голосов
/ 23 октября 2019

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

Требования: мне нужно заменить символы на - (дефис), если содержимое файла другоечем - .0-9A-Za-z (дефис, пробел, точка, от 0 до 9, от a до z и от A до Z) * ​​1005 *

Примечание: если в файле bat есть синтаксическая ошибка, тогда мой файл данных становится пустым. Это никогда не должно произойти.

Пожалуйста, помогите.

@echo off
Mode 85,35 & color 0A
Title Replace Multi String using Regex with vbscript into Folder with text files
Set "Source_Folder=\\server\Import\LoadError\dump"
Set "Backup_Folder=\\server\APImport\LoadError\dump\Backup_dump\"
Rem :: Just make a backup of folder and its contents if something went wrong!
If Not Exist "%Backup_Folder%" XCopy "%Source_Folder%" "%Backup_Folder%" /D /Y /E /F >%~dp0BackupLogFile.txt
Set "VBSFILE=%tmp%\%~n0.vbs" & Call :CreateVBS
Set "TmpFile=%Temp%\%~n0.tmp"

for /R "%Source_Folder%" %%f in (*JEG_OAP*.*) do (
    echo( ------------------------------------------
    echo  Replacing Contents of "%%f"


    echo( ------------------------------------------
    Call :Search_Replace "%%f" "%TmpFile%"
    Move /Y "%TmpFile%" "%%f">nul
)

Timeout /T 2 /NoBreak>nul & Exit
::-----------------------------------------------------------------------------
:CreateVBS
(
    echo WScript.StdOut.WriteLine Search_Replace(Data^)
    echo Function Search_Replace(Data^)
    echo Dim strPattern, strReplace, strResult,oRegExp
    echo Data = "%~1" 
    echo Data = WScript.StdIn.ReadAll
    echo strPattern = "[\\\/\/`%''*+.:;<>=!_&~{}[]^?$#@"]"
    echo strReplace = "-"
    echo Set oRegExp = New RegExp
    echo oRegExp.Global = True 
    echo oRegExp.IgnoreCase = True 
    echo oRegExp.Pattern = strPattern
    echo strResult = oRegExp.Replace(Data,strReplace^)
    echo Search_Replace = strResult
    echo End Function
)>"%VBSFILE%"
Exit /b 
::----------------------------------------------------------------------------
:Search_Replace <InputFile> <OutPutFile>
Cscript //nologo "%VBSFILE%" < "%~1" > "%~2"
Exit /B
::----------------------------------------------------------------------------

1 Ответ

0 голосов
/ 23 октября 2019

Как насчет замены:

    echo strPattern = "[\\\/\/`%''*+.:;<>=!_&~{}[]^?$#@"]"

на:

    echo strPattern = "[^-.0-9A-Za-z\n\r]"

Это должно выбрать все символы, которых нет в наборе, вместо того, чтобы пытаться определить каждого, кого вы хотитескорее нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...