[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

%%~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都是变量。

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

f , i , a只是for中的自变量名字而已 , 只要符合规则 , 随便起
%%~nxq
%%~nxw
%%~nxe
%%~nxr
%%~nx/
%%~nx-
%%~nx^"
%%~nx^^

TOP

回复 1# lforl


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

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

评分人数

    • lforl: 谢谢大佬提点!技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

最后一个字符是 变量名

TOP

返回列表