将path列表转换为文件名列表

背景

我发现自己经常复制文件path到剪贴板,这从Windows资源pipe理器执行起来有些麻烦。

所以我写了一个小小的.bat文件,放入%APPDATA%\Microsoft\Windows\SendTo\文件夹,利用CLIP可执行文件将所选文件path的列表复制到剪贴板。 这个文件只包含一行:

 echo|set /p= "%*" | clip.exe 

哪个工作相当好,我可以在资源pipe理器中select一个或多个文件,右键点击它们和“发送到” .bat文件,将它们复制到剪贴板。 每个文件path是完整的,并通过空格字符与其他文件path分开。

有时,我不想复制完整文件path的列表,但宁愿只有文件名的扩展名列表。 我知道如何使用这里或这里描述的%~nx语法对单个文件path进行转换。

我尝试了这些不同的组合,但似乎无法为我的path列表find可行的解决scheme。 以下代码正确地echo显文件名:

 for %%F in (%*) do echo %%~nxF 

…但我怎么把它们合并到CLIP ? 我必须做string连接吗? 也许在一个子程序中被call ,还是有一个更优雅的解决scheme?

以下将把每个文件名放在剪贴板的一个单独的行中:

 @(for %%F in (%*) do @echo %%~nxF)|clip 

如果您愿意的话,下面将在一行中放置一个空格分隔的文件名列表,每个文件名附带引号。

 @(for %%F in (%*) do @<nul set /p =""%%~nxF" ")|clip 

你不能只是:

 echo|set /p= "%~nx*" | clip.exe