StringRegExp($Clip, '(\a:\\)([^/\\<>:*?"|])*\.(txt|txt\.bk)(\n|$)')
Пока не проверял. Поясню немного:
([^\\/<>:*?"|])* - означает наличие любых символов, кроме тех, которые не могут присутствовать в имени файла. Надеюсь, что правильно записал выражение. Хотя если в буфере будет что-то типа: D:::\Bla\Text.txt - правильно обравботать не получиться.
Ну, я не думаю, что кто-то будет так маньячиться.
Щас немного потестирую.
Стоп. пути только полные, или могут быть относительные?
Пока не работает. Даже понял, почему

Сменились значения спец. символов. Придёться с английской справкой работать((
Я немножко в ступоре))
StringRegExp($Clip, '\b:\\([^\\/<>:*?|])*')) - вот это проверит, может ли являеться ли $Clip путём к файлу. Однако расширение она учесть не сможет (точки могут быть в любом месте файла). Это уже надо сильно усложнять выражение, что приведёт к увеличению времени обработки. А это здесь явно не нужно.
Щас буду думать дальше.
И ещё, как вариант, проверять, путь ли в буфере, не во время вызова контекстного меню, а регулярно, во время работы программы. Т. е. если буфер изменился - проверить, путь ли в нём теперь.
Я дурак. Поставил в регулярное выражение символ \ и думаю, почему неправильно обрабатывает...
Всё. Вот моё окончательное слово:
Код:

StringRegExp($Clip, '\b:\\([^/<>:*?|])*(\.txt|txt\.bk)(\n|$)')
P. S. Только для полных путей.