将路径列表转换为文件名列表

Convert list of paths to list of filenames

背景

我发现自己经常将文件路径复制到剪贴板,这在 Windows Explorer 中做起来有点麻烦。

所以我写了一个小 .bat 文件放入 %APPDATA%\Microsoft\Windows\SendTo\ 文件夹,利用 CLIP executable 将 selected 文件路径列表复制到剪贴板.此文件仅包含一行:

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

效果很好,我可以在资源管理器中 select 一个或多个文件名,右键单击它们,然后 "Send To" .bat 文件,将它们复制到剪贴板。每个文件路径都是完整的,并由 space 字符与其他文件路径分隔。

问题

有时,我不想复制完整文件路径的列表,但更希望有一个只包含文件名及其扩展名的列表。我知道如何使用 %~nx 语法对单个文件路径进行转换,如 here or here.

所述

我尝试了这些的不同组合,但似乎无法为我的 list 路径找到可行的解决方案。以下代码 echo 文件名正确:

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

...但是我如何将它们组合起来传递给 CLIP?我必须进行字符串连接吗?也许在要 called 的子程序中,或者是否有更优雅的解决方案?

难道你不能:

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

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

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

如果您愿意,以下内容会将 space 分隔的文件名列表放在一行中,每个文件名都用引号引起来。

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