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

[文件操作] 批处理脚本无法处理并重命名包含表情符号的文件夹

[复制链接]
发表于 2025-5-13 21:26:21 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-5-13 21:42 编辑


先在当前目录下复刻一个 "abc❤️🐾xyz.txt" 文件,再用系统默认的936码页直接在命令行手试以下两行代码,看看能否出现没有包含?字符的正确结果(即与切换65001码页后获得的相同结果)...

  1. ::先手试》用变量接收 for 管道返回值
  2. for /f "delims=" %f in ('dir/b/a-d "*❤️🐾*" ') do set "f=%~nf [2p3v45kb]%~xf"
  3. ::再手试》直接用 for 管道返回值更名
  4. for /f "delims=" %f in ('dir/b/a-d "*❤️🐾*" ') do ren "%~ff" "%~nf [2p3v45kb]%~xf"
复制代码
发表于 2025-5-13 21:55:06 | 显示全部楼层
回复 8# buyiyang


    其实不一定是GetFullPathName处理的 ,也有可能在调用GetFullPathName前就调用其他函数进行了通配符的处理 ,然后才调用GetFullPathName的
发表于 2025-5-13 22:01:07 | 显示全部楼层
回复 16# aloha20200628


    你这是文件不是文件夹 ,ren命令本身支持通配符  ,但是通配结果会拒绝处理文件夹 ,通配符通配到文件夹和文件时会过滤掉文件夹 ,只通配到文件夹时直接报错
其实不光ren ,pushd 应该也是把?号当成通配符的 ,也有可能因为通配不当出问题
发表于 2025-5-13 22:14:41 | 显示全部楼层
回复 16# aloha20200628


    这两个都是可以的,因为使用了都使用了变量增强扩展(%~nf、%~ff),用%f试试。
实际上只要使用了变量增强扩展就会进行搜索操作获取确定的全路径,然后根据修饰符(f、n、x、d、p)进行切分。
发表于 2025-5-13 22:20:34 | 显示全部楼层
回复 18# Five66

用16楼代码(/a-d 改为 /ad)处理子目录(例如先复刻一个 "abc❤️🐾xyz" 子目录),其结果是一样的...
发表于 2025-5-13 22:35:18 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-5-13 22:43 编辑


简言之,在系统默认的936码页下还能有一种方法可以保全(即不出现?字符) for/f...() 管道返回值中包含的那些 '超出简中字符集以外的字符'...
发表于 2025-5-13 22:52:12 | 显示全部楼层
回复 20# aloha20200628


    额 ,没注意后面 ,就如楼上(19楼)说的那样
虽然这样可行 ,但是因为以通配符形式工作作的 ,可能会出现通配不当而出问题 ,尤其是文件和文件夹共存而且名字差不多时
你可以新建一个文件夹
abc❤🐾xyz
然后再新建一个文件
abc♪🐾xyz
接着打开cmd ,在cmd窗口输入或粘贴命令并执行 ,看看结果

  1. for /f "delims=" %f in ('dir/b/ad "*❤🐾*" ') do ren "%~ff" "%~nf [2p3v45kb]%~xf"
复制代码
发表于 2025-5-13 23:09:24 | 显示全部楼层
回复 22# Five66

21楼所述的 '保全',即能获取实值,也就是不出现?字符,也就不会有 '通配' 问题...
发表于 2025-5-13 23:43:03 | 显示全部楼层
回复 23# aloha20200628


    哪里保全了? 22楼说的试了没?  本质上还是出现了?号 ,单纯只是因为没遇到出问题情况而看起来正常罢了
发表于 2025-5-14 00:29:34 | 显示全部楼层
回复 24# Five66

试过才有23楼回帖...
另》用 dir /ad 就不会匹配出文件实例,用 dir /a-d 就不会匹配出目录实例,否则就乱套了...
发表于 2025-5-14 00:39:10 | 显示全部楼层
回复 25# aloha20200628


    问题就是dir /ad ,再仔细看看使用dir /ad执行后实际是哪个被修改了??
发表于 2025-5-14 00:51:42 | 显示全部楼层
回复 26# Five66


我用的是win8.1简中系统
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 07:12 , Processed in 0.019805 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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