将路径列表转换为文件名列表
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
?我必须进行字符串连接吗?也许在要 call
ed 的子程序中,或者是否有更优雅的解决方案?
难道你不能:
echo|set /p= "%~nx*" | clip.exe
以下将把每个文件名放在剪贴板中单独的一行:
@(for %%F in (%*) do @echo %%~nxF)|clip
如果您愿意,以下内容会将 space 分隔的文件名列表放在一行中,每个文件名都用引号引起来。
@(for %%F in (%*) do @<nul set /p =""%%~nxF" ")|clip
背景
我发现自己经常将文件路径复制到剪贴板,这在 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
?我必须进行字符串连接吗?也许在要 call
ed 的子程序中,或者是否有更优雅的解决方案?
难道你不能:
echo|set /p= "%~nx*" | clip.exe
以下将把每个文件名放在剪贴板中单独的一行:
@(for %%F in (%*) do @echo %%~nxF)|clip
如果您愿意,以下内容会将 space 分隔的文件名列表放在一行中,每个文件名都用引号引起来。
@(for %%F in (%*) do @<nul set /p =""%%~nxF" ")|clip