PDA

Показать полную графическую версию : [решено] Сравнение строк, а где Like?


rudimko
15-08-2014, 16:30
Друзья, прошу прощения за сверхдебильный вопрос, впервый "пришлось" залезть в vbs, начал ковыряться, что-то там создавать... В общем вопрос - как мне правильно написать сравнение с подстановочными знаками?
for each file in folder.files
if file.name LIKE mask then wscript.echo file.name
next

Как правильно пользоваться, подскажите. Спасибо.

pogo
15-08-2014, 17:52
Попробуйте так
for each file in folder.files
if file.name = mask then wscript.echo file.name
next

Iska
15-08-2014, 18:14
Используйте регулярные выражения. Например:
Option Explicit

Dim objFSO
Dim objFile

Dim objRegExp


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
.Pattern = "^ras.*a.*\.dll$"
.IgnoreCase = True
End With

For Each objFile In objFSO.GetFolder("C:\Windows\System32").Files
If objRegExp.Test(objFile.Name) Then
WScript.Echo objFile.Name
End If
Next

Set objRegExp = Nothing
Set objFSO = Nothing

WScript.Quit 0

rudimko
15-08-2014, 21:21
pogo, пробовал уже ;)
Iska, работает, спасибо, сейчас внедримс.

rudimko
08-09-2014, 09:29
Iska, подскажи, а как для регулярного выражения написать вот такую маску правильно - "^*^.txt"? Где все так и есть как написано, кроме *...

Iska
08-09-2014, 09:36
вот такую маску правильно - "^*^.txt"? Где все так и есть как написано, кроме *... »
То есть, буквально «^» входят в имя файла? Попробуйте так (не проверялось):
With objRegExp
.Pattern = "^\^.*\^\.txt$"
.IgnoreCase = True
End With

rudimko
08-09-2014, 09:40
То есть, буквально «^» входят в имя файла? Попробуйте так (не проверялось): »
угу, входят в название, к сожалению. Не сработало.

Iska
08-09-2014, 10:52
Создал файл «C:\Песочница\054\^0001^.txt». Запустил код:
Option Explicit

Dim objFSO
Dim objFile

Dim objRegExp


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
.Pattern = "^\^.*\^\.txt$"
.IgnoreCase = True
End With

For Each objFile In objFSO.GetFolder("C:\Песочница\054").Files
If objRegExp.Test(objFile.Name) Then
WScript.Echo objFile.Name
End If
Next

Set objRegExp = Nothing
Set objFSO = Nothing

WScript.Quit 0
Получил:
^0001^.txt
Приведите примеры имён Ваших искомых файлов.

rudimko
08-09-2014, 11:07
.Pattern = WshShell.ExpandEnvironmentStrings("%Computername%") & "^\^.*\^\.txt$"Что-то я не так делаю походу... compname^блаблабла^.txt не прокатило
Или надо убрать ^ одну походу, ибо вхождение происходит раньше?
.Pattern = WshShell.ExpandEnvironmentStrings("%Computername%") & "\^.*\^\.txt$"Вроде отрабатывает, но верный ли это вариант?

Iska
08-09-2014, 11:17
rudimko, я просил представить примеры имён файлов, а не Ваш код.

rudimko
08-09-2014, 11:20
rudimko, я просил представить примеры имён файлов, а не Ваш код. »
ну я же написал - compname^блаблабла^.txt

Iska
08-09-2014, 11:24
With objRegExp
.Pattern = "^compname\^.*\^\.txt$"
.IgnoreCase = True
End With

rudimko
08-09-2014, 11:34
Iska »
спасибо.




© OSzone.net 2001-2012