|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Текстовые файлы |
|
CMD/BAT - Текстовые файлы
|
Новый участник Сообщения: 14 |
Профиль | Отправить PM | Цитировать Доброе время!
Прошу помощи, для создания батника нужно в текстовый файл нужно удалить знак пробел перед знаком "]" это знак не везде встречается в текстовом файле. |
|
Отправлено: 12:12, 09-08-2019 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата AKadekin:
Он либо один, либо этих файлов больше чем один. Это взаимоисключающие условия. [когнитивный диссонанс OFF] Цитата AKadekin:
#requires -v 3.0 # путь к одному каталогу с файлами: $fldin = 'z:\Путь_к_каталогу_с_файлами\Один_Каталог\*' # путь к разным, целевым каталогам: $fldout1 = 'z:\Путь_к_каталогу_с_файлами\AX1' $fldout2 = 'z:\Путь_к_каталогу_с_файлами\MX1' # если не существуют, то создаем: if(!(test-path $fldout1)){md $fldout1|out-null} if(!(test-path $fldout2)){md $fldout2|out-null} # фильтр файлов по расширению: $inc = '*.AX1','*.MX1' # расширение для переименования: $ext = '.MIX' # кодировка: $enc = 'utf8' dir $fld -inc $inc -file|%{ $file = $_ $tmp = (gc $_.fullname -raw -enc $enc) -replace ' \]',']' $tmp|sc $file.fullname -enc $enc if ($_.extension -eq '.AX1'){ mi $_.fullname ("$fldout1\" + $_.basename + $ext) } else { mi $_.fullname ("$fldout2\" + $_.basename + $ext) } } |
||
------- Последний раз редактировалось YuS_2, 10-08-2019 в 13:08. Отправлено: 13:00, 10-08-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Это пример одного файлов они по структуре похоже, отличаются только внутренними данными.
|
Отправлено: 13:54, 10-08-2019 | #12 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать AKadekin,
VBS. Пропишите свои пути
FileIn = Array("Z:\Box_In", "AX1", "Z:\Box_Out1", "MIX", _ "Z:\Box_In", "MX1", "Z:\Box_Out2", "MIX") RegExp = " *]" Rep = "]" NN = 4 N1 = LBound(FileIn) N2 = UBound(FileIn) ErrMsg = "" For i = N1 To N2 Step NN Call Working(FileIn(i), FileIn(i + 1), FileIn(i + 2), FileIn(i + 3), RegExp, Rep, xDin, xOut, ErrMsg) Next 'If ErrMsg <> "" Then MsgBox ErrMsg If ErrMsg <> "" Then WScript.Echo ErrMsg ' ========================= Sub Working(Din, Ein, Dout, Eout, Rx, Rp, iDin, iDout, ErrM) Set FSO = CreateObject("Scripting.FileSystemObject") If ExistDir(FSO, Din, iDin, ErrM) And ExistDir(FSO, Dout, iOut, ErrM) Then Set RegFile = CreateObject("VBScript.RegExp") RegFile.Pattern = "^.*\." + Ein + "$" RegFile.IgnoreCase = True For Each jF In iDin.Files If RegFile.Test(jF.Name) Then If Retxt(FSO, jF, txt, Rx, Rp, ErrM) Then Call Outtxt(FSO, jF, Dout + "\" + FSO.GetBaseName(jF) + "." + Eout, txt, ErrM) End If End If Next End If End Sub Function ExistDir(FSO, D, iD, ErrM) ExistDir = True On Error Resume Next Set iD = FSO.GetFolder(D) If Err.Number <> 0 Then ErrM = ErrM + "--- """ + D + """" + vbCrLf + " Open folder. Err.Number=" + CStr(Err.Number) + " " + Err.Description + vbCrLf ExistDir = False End If On Error GoTo 0 End Function Function Retxt(FSO, fName, txt, RExp, RR, MS) Retxt = False On Error Resume Next With FSO.OpenTextFile(fName, 1) If Err.Number <> 0 Then MS = MS + "--- " + fName + vbCrLf + " Error open file. Err.Number=" + CStr(Err.Number) + " " + Err.Description + vbCrLf On Error GoTo 0 Exit Function End If txt = .ReadAll If Err.Number <> 0 Then MS = MS + "--- " + fName + vbCrLf + " Error read file. Err.Number=" + CStr(Err.Number) + " " + Err.Description + vbCrLf On Error GoTo 0 Exit Function End If .Close End With On Error GoTo 0 With CreateObject("VBScript.RegExp") .Pattern = RExp .IgnoreCase = True .Global = True If Not .Test(txt) Then '''''''''' MS = MS + "--- " + fName + vbCrLf + " no replace." + " Reg expression: " + """" + RExp + """" + vbCrLf Exit Function End If txt = .Replace(txt, RR) End With Retxt = True End Function Sub Outtxt(FSO, fIn, fOut, txt, MS) On Error Resume Next Set WW = FSO.CreateTextFile(fOut, True) If Err.Number <> 0 Then MS = MS + "--- " + fOut + vbCrLf + " Error create file. Err.Number=" + CStr(Err.Number) + " " + Err.Description + vbCrLf On Error GoTo 0 Exit Sub End If WW.Write txt If Err.Number <> 0 Then MS = MS + "--- " + fOut + vbCrLf + " Error write in file. Err.Number=" + CStr(Err.Number) + " " + Err.Description + vbCrLf On Error GoTo 0 WW.Close Exit Sub End If WW.Close Err.Number = 0 If FSO.FileExists(fOut) Then Call FSO.DeleteFile(fIn, True) If Err.Number <> 0 Then MS = MS + "--- " + fIn + vbCrLf + " Error delete file. Err.Number=" + CStr(Err.Number) + " " + Err.Description + vbCrLf On Error GoTo 0 Exit Sub End If On Error GoTo 0 End Sub |
------- Последний раз редактировалось megaloman, 10-08-2019 в 19:46. Отправлено: 17:53, 10-08-2019 | #13 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать В архиве находятся файлыDaten.zip
|
Отправлено: 10:15, 12-08-2019 | #14 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать AKadekin,
если просто пробел мозолит глаза, не проще убрать [] везде по тексту, потому как пробелы в конце строк встречаются и в строках не имеющих этих скобок. (да, и нужны ли 17 пробелов между абзацами?), т.е. как в дальнейшем будет использоваться этот файл? |
Отправлено: 11:48, 12-08-2019 | #15 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Вот CMD. Пустые строки съест. VBS работает намного быстрее, но пустые строки сохраняет. Конкретно требований насчёт пустых строк не было. И концевых пробелов тоже
@Echo Off Call :ReMove "Z:\Box_In\*.AF1" "Z:\Box_Out1" "MIX" " ]" "]" Call :ReMove "Z:\Box_In\*.AX1" "Z:\Box_Out2" "MIX" " ]" "]" Exit /B :ReMove For %%f In (%1) Do ( >"%~2\%%~nf.%~3" (FOR /F "usebackq delims=" %%s IN (`2^>nul More "%%f"`) DO ( Call :Replace "%%s" %4 %5 )) If Exist "%~2\%%~nf.%~3" Del "%%f" ) Exit /B :Replace Set "SS=%~1" :Begin Set "SSS=%SS%" Call Set "SS=%%SS:%~2=%~3%%" If /I Not "%SSS%"=="%SS%" GoTo :Begin Echo %SS% Exit /B |
------- Последний раз редактировалось megaloman, 12-08-2019 в 16:52. Отправлено: 16:03, 12-08-2019 | #16 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Главное что бы до ] пробел убрать.
Структура должна быть сохранена и столько пробелов нужно. |
Отправлено: 17:29, 14-08-2019 | #17 |
Новый участник Сообщения: 14
|
Профиль | Отправить PM | Цитировать Прошу помощи, для решения этой проблемы.
|
Отправлено: 08:05, 15-08-2019 | #18 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать AKadekin,
Офигеть... а всё, что предложено выше (cmd, wsh, powershell) - бредятина, которая Вам не помогла? Зачетно... Хотя, да... в моем скрипте была опечатка в наименовании переменной... Вот исправленный вариант: #requires -v 3.0 # путь к одному каталогу с файлами: $fldin = 'z:\Путь_к_каталогу_с_файлами\Один_Каталог\*' # путь к разным, целевым каталогам: $fldout1 = 'z:\Путь_к_каталогу_с_файлами\AF1' $fldout2 = 'z:\Путь_к_каталогу_с_файлами\AX1' # если не существуют, то создаем: if(!(test-path $fldout1)){md $fldout1|out-null} if(!(test-path $fldout2)){md $fldout2|out-null} # фильтр файлов по расширению: $inc = '*.AF1','*.AX1' # расширение для переименования: $ext = '.MIX' # кодировка: $enc = 'utf8' dir $fldin -inc $inc -file|%{ $file = $_ $tmp = (gc $_.fullname -raw -enc $enc) -replace ' \]',']' $tmp|sc $file.fullname -enc $enc if ($_.extension -eq '.AF1'){ mi $_.fullname ("$fldout1\" + $_.basename + $ext) } elseif ($_.extension -eq '.AX1') { mi $_.fullname ("$fldout2\" + $_.basename + $ext) } } Цитата AKadekin:
1023000.AF1 1023000.AX1 что явно не соответствует *.AX1 и *.MX1 |
|
------- Последний раз редактировалось YuS_2, 15-08-2019 в 09:15. Отправлено: 08:32, 15-08-2019 | #19 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать AKadekin, что конкретно не устроило в этом моём решении? Оно полностью отвечает поставленной Вами задаче.
Код сохраните в файл с расширением .vbs. Цитата:
Одна строка соответствует одному сценарию обработки. Здесь в первой строке в кавычках: В папке "Z:\Box_In" Надо обработать все файлы с расширением "AX1" Поместить обработанные в папку "Z:\Box_Out1" При этом изменить им расширение на "MIX" В чём трудность прописать свои данные? Во второй строке аналогично для второго расширения файлов И таких строк может быть сколько угодно (Вы заказали 2 варианта) Запускаете скрипт как любой исполнимый файл. Кстати, это решение можно поместить в назначенные задания, чтобы скрипт исполнялся с некоторой периодичностью без Вашего дополнительного вмешательства: Cscript "Путь\имяскрипта.vbs" В чем у Вас непонимание? Вы хоть раз пытались запустить этот скрипт?. Или иной из предложенных Вам решений? Какой при этом результат получили? Чтобы Вам помочь, нужна адекватная обратная связь, а пустые стенания Цитата:
|
||
------- Последний раз редактировалось megaloman, 15-08-2019 в 11:25. Отправлено: 11:02, 15-08-2019 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - как сравнить текстовые файлы в папке? | rsersh | Скриптовые языки администрирования Windows | 1 | 04-06-2016 22:24 | |
CMD/BAT - Как найти текстовые файлы | yaoleg2 | Скриптовые языки администрирования Windows | 7 | 10-01-2013 21:23 | |
Прочие - Текстовые файлы | Bazaroff | Программное обеспечение Windows | 3 | 25-04-2010 21:39 | |
Не открываются текстовые файлы и изображения и к ним создались файлы с расшир. drweb | leda | Лечение систем от вредоносных программ | 1 | 03-10-2009 01:22 | |
Delphi - Текстовые файлы в Delphi | Borislav | Программирование и базы данных | 2 | 11-01-2005 13:18 |
|