CTRL + C на файле / папке, как получить имя файла в пакете? (чтение файлов буфера обмена из пакета)

391
Basj

Когда вы делаете Copy( CTRL+ C) для файла или папки, то в некоторых программах, но не во всех (например: это работает в адресной строке Windows Explorer, также с программным обеспечением для индексирования Everything), при вставке ( CTRL+ V), имени файла или каталога имя наклеивается как текст, например: "D:\Test\Temp".

Вопрос: Если вы делаете CTRL+ Cдля файла или папки в проводнике Windows, как получить его имя в пакетном файле, test.batкоторый вы запускаете сразу после?

Я попытался с clip.exe, как предложено в Access clipboard в пакетном файле Windows , но это не сработало: похоже, что clip.exe делает противоположное (запись в буфер обмена).


Примечание: в отличие от Как скопировать путь к файлу в буфер обмена? (для его ответов требуется стороннее программное обеспечение, или другое решение для горячих клавиш, или используйте AutoHotkey), здесь я явно ищу решение, которое работает в пакетном режиме, со стандартным сочетанием клавиш CTRL + C (а не с другой горячей клавишей, не использующей AutoHotkey и т. д. ) и никакого стороннего программного обеспечения.

1
Возможный дубликат [Как скопировать путь к файлу в буфер обмена?] (Https://superuser.com/questions/14974/how-to-copy-file-path-to-clipboard) WireGuy 5 лет назад 0
@WireGuy: Нет, пожалуйста, смотрите отредактированный вопрос. Basj 5 лет назад 0

4 ответа на вопрос

1
RalfFriedl

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

Программа может помещать контент разных типов в буфер обмена. Например, Word может размещать текст как обычный текст и как отформатированный текст. Некоторые программы умны и извлекают имя файла, когда вы поместили (ссылку на) файл в буфер обмена. К сожалению, командных окон нет.

Это выглядит многообещающе, но я ищу решение только с CTRL + C для взаимодействия с пользователем. (Нет перетаскивания). Остальное должно быть сделано только с помощью пакетного файла .bat. Basj 5 лет назад 0
если вы запускаете пакетный файл, то вам уже нужно перетащить эти файлы в пакетный файл в проводнике или ввести имя пакетного файла, а затем перетащить его в cmd. Я не понимаю, что вы подразумеваете под «как получить его имя файла в пакетном файле test.bat» в этом случае. Если вы хотите вставить эти имена в содержимое пакетного файла, то это бесполезно, в противном случае передавать их в качестве аргументов, как я упоминал phuclv 5 лет назад 0
0
NOLFXceptMe

Выберите файл или папку, нажмите F2, затем используйте Ctrl-C. Это должно позволить вам просто скопировать имя (на самом деле «базовое имя») файла или папки.

Я знаю этот трюк, но я ищу решение, которое работает со стандартными CTRL + C (и без F2). Более того, я ищу полный путь. Basj 5 лет назад 0
0
WireGuy

Вы можете Shift+Right clickна файл в проводнике и выбрать «Копировать как путь»:

Или, если вы выбираете имя файла и используете Ctrl+Shift+C.

Это скажет Проводнику скопировать информацию в буфер обмена в формате CF_TEXT вместо обычного формата CF_HDROP. Некоторые программы не знают, что делать с форматом CF_HDROP, но все должны понимать формат CF_TEXT.

Спасибо за Ваш ответ. Как уже упоминалось в вопросе, я ищу решение с помощью CTRL + C, которое затем будет доступно в командном файле .bat через командную строку (без какого-либо файла перетаскивания в cmd.exe). Basj 5 лет назад 0
см. ссылку для вставки в командную строку: https://www.howtogeek.com/howto/25590/how-to-enable-ctrlv-for-pasting-in-the-windows-command-prompt/ WireGuy 5 лет назад 0
Спасибо @WireGuy, я уже использую это. Но в моем контексте пакет даже не отображается, поэтому мне не нужно было видеть cmd.exe, чтобы вставить туда вручную. Basj 5 лет назад 0
Чтобы понять, почему у меня такие странные требования, вот решение с использованием Python: https://superuser.com/questions/260740/are-there-any-gui-tools-to-manage-creating-symlinks#comment2033158_260740 для скважины известная проблема (создать символическую ссылку с графическим интерфейсом в Windows). Я пытался сделать то же самое только с пакетом (без Python), но для этого мне нужно иметь возможность получить имя файла в пакете;) Вот и вся история! Кстати, спасибо за вашу помощь! Basj 5 лет назад 0
@Basj просто перетащите файлы в командный файл, нет необходимости отображать cmd. Иначе как вы собираетесь вставить эти имена файлов? phuclv 5 лет назад 0
0
Alex

Используйте powershellэтот подарок во всех поддерживаемых версиях Windows вместо устаревшей cmdоболочки.
(Это обещано Microsoft, чтобы быть удаленным в будущем).

Запустите powershellи используйте функцию:

Get-Clipboard 

он вернет вам содержимое буфера обмена, а Set-Clipboardпоступит наоборот - поместите что-нибудь в буфер обмена.

Если вы не хотите переключаться на PowerShell, вы можете вызвать его по требованию из вашего пакетного скрипта как:

 powershell -Command "& " 

чтобы получить содержимое буфера обмена в вашем скрипте.

Я получаю это в Windows 7: «Термин« Get-Clipboard »не распознается как имя командлета, функции». Basj 5 лет назад 0
Get-Clipboard - это новый командлет в [PowerShell 5.0] (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-clipboard?view=powershell-5.0). Windows 7 включает PowerShell 2.0, который слишком стар, чтобы быть полезным phuclv 5 лет назад 0
@Basj Как указывал phuclv, вам нужна более свежая версия PowerShell и, по крайней мере, .NET Framework 4.5 или выше. Alex 5 лет назад 0