找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18978|回复: 3

[文件操作] [已解决]批处理for命令%%~nxf、%%~nxi有什么区别,怎么会有%%~nxa这种

[复制链接]
发表于 2024-6-3 11:05:34 | 显示全部楼层 |阅读模式
%%~nxf、%%~nxi和%%~nxa到底有什么区别?
GPT都解释不太清楚%%~nxa,%%~nxf和%%~nxi的解释还行。

老版主的文章解释
%%~ni表示获取文件名,%%~xi表示获取扩展名(带点号)……它们可以组合使用,如%%~nxi表示获取文件名和后缀名。


关于%%~nxf和%%~nxi,GPT的解释(一句话一个新,一个老):
%%~ni代表获取文件路径的短文件名部分,不包括扩展名;%%~xi代表获取文件路径的短文件名的扩展名部分,包括点号;%%~nxi代表获取文件路径的短文件名和扩展名部分。
在 Windows 命令提示符中,文件的短文件名是用于兼容旧式 8.3 文件名格式的命名约定。这些短文件名通常以波浪号(~)开头。

在现代的 Windows 环境中如 Windows 10,通常使用长文件名(Long File Name)格式,而不是旧式的 8.3 文件名(Short File Name)格式。

因此,在大多数情况下,使用 %%~nxf 比 %%~nxi 更为适用。%%~nxf 可以直接获取包括文件名和扩展名在内的完整文件名。例如,对于文件路径 "C:\folder\file.txt",%%~nxf 将返回 "file.txt"。


结合正常运转的实际案例:
  1. Windows Registry Editor Version 5.00

  2. [HKEY_CLASSES_ROOT\SystemFileAssociations\.py\Shell\copyNameRunCMD]
  3. @="复制文件名并开cmd运行窗口"
  4. "Icon"="imageres.dll,-5372"

  5. [HKEY_CLASSES_ROOT\SystemFileAssociations\.py\Shell\copyNameRunCMD\Command]

  6. @="cmd /V:ON /K For %%a in ("%1") do @echo %%~nxa|clip & echo 已复制文件名:%%~nxa,右击粘贴即可运行"
复制代码
这下似乎比较明白了:
%%~nxi——是系统内置的变量%1(当前对象的全路径)的文件名部分%i,取其文件名+扩展名。
%%~nxf——是系统内置的变量%1(当前对象的全路径)的文件名部分%f(针对新系统的长文件名),取其文件名+扩展名。
%%~nxa——是自定义变量%a(由%1获取=当前对象的全路径),nxa意思取%a中的文件名+扩展名。如果变量命名为%r那么写作%%~nxr(这点GPT是糊涂的)
上面i,f,a都是变量。

请路过大佬看下,我这种理解是否正确。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2024-6-3 12:26:55 | 显示全部楼层
最后一个字符是 变量名
发表于 2024-6-3 13:37:20 | 显示全部楼层
回复 1# lforl


因此,在大多数情况下,使用 %%~nxf 比 %%~nxi 更为适用。

忘掉AI给的这个说法,不要纠结什么长文件名、短文件名。
简单来说,你最后的理解是正确的,到这一步就够了。

评分

参与人数 1技术 +1 收起 理由
lforl + 1 谢谢大佬提点!

查看全部评分

发表于 2024-6-3 16:21:39 | 显示全部楼层
f , i , a只是for中的自变量名字而已 , 只要符合规则 , 随便起
%%~nxq
%%~nxw
%%~nxe
%%~nxr
%%~nx/
%%~nx-
%%~nx^"
%%~nx^^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 00:56 , Processed in 0.029186 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表