NirCmd:复制路径与复制文件名

NirCmd:复制路径与复制文件名

nircmd.exe execmd (echo.|set /p=\"%1\") | clip

将 %1 路径复制到剪贴板。

我如何复制文件名到剪贴板使用 NirCmd

echo. | set /p = "%~nx1" | clip在 BAT 文件中工作。

nircmd.exe execmd (echo.|set /p=\"%~nx1\") | clip不起作用。

答案1

// 编辑

echo. | set /p = "%~nx1" | clip在 BAT 文件中工作。
是的,命令行解释器会将参数扩展%1为所需的形式,%~nx1(名称.扩展名)传递给 cmd.exe 执行的 bat

nircmd.exe execmd (echo.|set /p="%~nx1") | clip不起作用。
请注意,它不起作用,因为您想要将注册表参数扩展为 nircmd 命令补充,而这在不带任何参数的 bat 之外,是由命令解释器传递给注册表的,而不是 bat……

没有扩展(%~?!1)对于任何注册表参数:

Arguments:
%1, %D, %H, %I, %L, %S, %V, %W
Not Work/Expand:
%~nx1, %~nxD, %~nxH, %~nxI, %~nxL, %~nxS, %~nxV, %~nxW
  Often we find "%1" in the commands associated with file types
(HKEY_CLASSES_ROOT\FileType\shell\open\command).
In Windows 9x through 2000 (and possibly XP) this would evaluate
to the short notation of the fully qualified path of the file of type FileType.
To get the long file name, use "%L" instead of "%1".


如何使用 NirCmd 将文件名复制到剪贴板?
它是不是可能的

  • 1.考虑到%L返回我的完整路径(带有 Name.eXtension)

  • 2.考虑到%W仅返回路径(不带%~nx-Name.eXtention)

  • 3.使用变量替换并获取%W\从定义的变量中删除路径的子字符串%L

C:\\Windows\\nircmd.exe execmd set "_=%L" & cmd /v /s /c "echo\|set/p;.="!_:%W\"=!"|clip"
  • 要不使用命令行添加条目,您可以使用带有 reg 的混合 bat 文件。

  • 只需将下面的文件保存为 .cmd 或 .bat 并以管理员身份运行。

Windows Registry Editor Version 5.00

;@(cls&%__APPDIR__%reg.exe import "%~f0" & goto :EOF)

[HKEY_CLASSES_ROOT\*\shell\CopyFileName]
@="CopyFileName"

[HKEY_CLASSES_ROOT\*\shell\CopyFileName\command]
@="C:\\\\Windows\\\\nircmd.exe execmd set \"_=%L\" & cmd /v /s /c \"echo\\|set/p;.=\"!_:%W\\=!\"|clip\""

编辑 //


您得到的%1是文件的完整路径,因为%1它也是注册表的一个参数......

  • 您可以尝试这些命令并查看结果,但对于注册表项,请以管理员身份运行
%__AppDir__%reg.exe add "HKEY_CLASSES_ROOT\*\shell\CopyFileName" /ve /d "CopyFileName" /f
%__AppDir__%reg.exe add "HKEY_CLASSES_ROOT\*\shell\CopyFileName\command" /ve /d "C:\\Windows\\nircmd.exe execmd echo\|set/p;.=\"%1\"|clip" /t reg_sz /f
  • 观察:1您可以替换并检查、、、、和的%1结果。%D%H%I%L%S%V%W

  • 观察:2您可以/t reg_sz用替换/t reg_expand_sz,获得相同的结果。

  • 观察:3使用%L你得到的文件的长完全限定路径

  • 观察:4将我的 Nircmd.exe 路径(C:\\Windows\\nircmd.exe)替换为您的路径。



答案2

我建议像这样执行命令cmd /c

"C:\Program Files\Nirsoft Package\NirSoft\x64\nircmd.exe" cmd /c (echo.|set /p=\"%1\") | clip

请注意,如果目的是.bat安静地执行文件,你可以在帖子中找到一些替代方案 以完全隐藏的方式运行批处理文件

相关内容