无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3138|回复: 31

[求助] 请求精通批处理大侠, 如何获取和修改特定情况下的文件名

[复制链接]
发表于 2021-2-24 07:30:38 | 显示全部楼层 |阅读模式
本帖最后由 2013kyj 于 2021-2-25 09:39 编辑

求助精通批处理的大侠,写两段BAT代码, 非常感谢!
目前, 本人都是在手动操作, 频繁操作时有点麻烦, 感觉用批处理应该可以实现! 搜索了一下百度, 没有找到类似的主题, 就来论坛请教, 若搞定, 10元红包, 意思一下


具体描述如下:


1.搜索并获取某个特定扩展名的文件
例如: 搜索D:\888文件夹下面是否有一个扩展名为sna的文件, 如果有, 则将其文件名存到变量%snafilename%并回显, 如果没有,  则退出
例如: 搜索D:\888文件夹, 搜索到一个abc.sna的文件[如果有多个只处理第一个], 则将abc存到变量%snafilename%并回显


2.修改与批处理文件同名的文件或文件夹的文件名
例如, 在D盘下有个名为888文件夹或文件[若同名的文件和文件夹同时存在则处理文件], 我新建一个888.bat的批处理, 双击执行后, 会在888文件夹或文件的后面添加当前日期和时间的后缀, 当再次双击执行后, 则删除以前的日期和时间的后缀改为新的日期和时间
实例说明:
假设当前时间是2021-02-24 7:05
D盘下有个名为888文件夹, 也有一个888.bat的批处理, 双击批处理后
888文件夹的名字就变成了: 888_2021-02-24_7-05
一份钟之后, 我又双击了批处理
888文件夹的名字就变成了: 888_2021-02-24_7-06
注意:
批处理只处理与自己名字相同前缀的文件或文件夹


发表于 2021-2-24 09:47:54 | 显示全部楼层
我觉得论坛应该出打赏机制.
对供需双方都好,论坛也能变得更活跃.
回复

使用道具 举报

发表于 2021-2-24 10:14:56 | 显示全部楼层
同名的文件和文件夹同时存在是不可能的

点评

不好意思,昨天没回复,刚上论坛 这个可以吧,例如 名为abc的文件和名为abc的记事本文件,可以同时存在  详情 回复 发表于 2021-2-25 08:47
回复

使用道具 举报

发表于 2021-2-24 11:03:50 | 显示全部楼层
这样的活,我觉得还是用其他脚本处理方便。
我习惯性用AutoIt3来做自动化
回复

使用道具 举报

发表于 2021-2-24 11:04:11 | 显示全部楼层
我可能帮不上,但我确实没看懂描述,可以从手动操作方面说下吗?再截几张图就更好了
回复

使用道具 举报

发表于 2021-2-24 13:10:27 | 显示全部楼层
搜索和重命名比较简单,主要是逻辑处理

之前写了个APK重命名的,给你拿去参考

APK_Rename_20201030.rar (959.53 KB, 下载次数: 6)
回复

使用道具 举报

发表于 2021-2-24 13:28:33 | 显示全部楼层
本帖最后由 2010techon 于 2021-2-24 18:19 编辑
1.搜索并获取某个特定扩展名的文件
例如: 搜索D:\888文件夹下面是否有一个扩展名为sna的文件, 如果有, 则将其文件名存到变量%snafilename%并回显, 如果没有,  则退出
例如: 搜索D:\888文件夹, 搜索到一个abc.sna的文件[如果有多个只处理第一个], 则将abc存到变量%snafilename%并回显

如果搜到一个 abc.sna 和一个 def.sna 变量“ snafilename=abc:def ”?像这样多个文件名存在一个变量里还是每个文件名存一个变量?
大致改了一下,见附件

RRR.zip (1.33 KB, 下载次数: 3)

点评

感谢大侠帮忙,昨天没在线,刚刚看到,不好意思,能修改成下面这样吗? 当我将批处理最后的两行改成如下,双击批处理后直接显示结果? Recursively=D:\888 FileExt=sna  详情 回复 发表于 2021-2-25 09:22
[如果有多个只处理第一个]  详情 回复 发表于 2021-2-24 15:48
回复

使用道具 举报

发表于 2021-2-24 14:16:27 来自手机 | 显示全部楼层
第一个可以帮你实现,第二个比较伤脑,也可以实现,但是比较伤脑。
10块,没意思。
回复

使用道具 举报

发表于 2021-2-24 15:48:06 | 显示全部楼层
2010techon 发表于 2021-2-24 13:28
如果搜到一个 abc.sna 和一个 def.sna 变量“ snafilename=abc:def ”?像这样多个文件名存在一个变量 ...

[如果有多个只处理第一个]
回复

使用道具 举报

发表于 2021-2-24 17:15:24 | 显示全部楼层
  1. @ECHO OFF && setlocal enableDelayedExpansion
  2. for %%i in ( *.txt ) do ( ren "%%i" "%%~ni_%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%`%time:~3,2%.txt" )
  3. pause
  4. for %%i in ( *.txt ) do ( set TMPSTR=%%~ni & ren %%i !TMPSTR:~0,-18!.txt )
  5. pause
复制代码

拼凑了两行:添加日期时间、去除日期时间

点评

获取日期时间,这里有很多方法 http://www.bathome.net/thread-3328-1-1.html  详情 回复 发表于 2021-2-24 19:13
回复

使用道具 举报

发表于 2021-2-24 19:13:09 | 显示全部楼层
liu_zhenfeng 发表于 2021-2-24 17:15
拼凑了两行:添加日期时间、去除日期时间

获取日期时间,这里有很多方法
http://www.bathome.net/thread-3328-1-1.html
回复

使用道具 举报

发表于 2021-2-25 08:41:22 | 显示全部楼层
本帖最后由 Climbing 于 2021-2-25 08:47 编辑

第1个问题:“如果有多个sna文件,只处理第一个”,那么以什么规则确定哪个文件是第一个,是按名字,还是按日期,顺序还是倒序。所以这问题出得相当不严谨。楼主你再仔细考虑一下。

第2个问题:当第一次运行时同名文件被改名后,第二次运行,我怎么知道上一次改的文件是哪个日期和时间,如果我不能确定这个日期时间,我怎么能找到上一次的文件名?而且,一旦改名后,这个文件就丧失了唯一性,后面就很难处理操作了。最可笑的是,楼主还一直把文件夹和文件混在一起操作,你要知道在批处理中处理文件和文件夹是不同的命令好不好?这只能说明楼主逻辑相当混乱。

所以,其实楼主的问题都不难,之所以代码难写,是因为楼主的逻辑比较混乱,你可能人为的把问题复杂化了。所以你不如不要谈什么设计思路,直接提出你原本想实现的效果,至于代码如何实现,交给真正懂编程的人来处理。

点评

你没事儿吧?同一个点评写三次?有点儿建设性好不好,对论坛没贡献可以,但不要灌水。  发表于 2021-2-25 10:00
相当有道理!加分!  发表于 2021-2-25 09:02
相当有道理!加分!  发表于 2021-2-25 09:02
相当有道理!加分!  发表于 2021-2-25 09:01
第1个问题:“如果有多个sna文件,只处理第一个”,那么以什么规则确定哪个文件是第一个,是按名字,还是按日期,顺序还是倒序。所以这问题出得相当不严谨。楼主你再仔细考虑一下。 感谢大侠指点,之所以问题不严  详情 回复 发表于 2021-2-25 09:00

评分

参与人数 1无忧币 +5 收起 理由
holley2008 + 5 相当有道理!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2021-2-25 08:47:44 | 显示全部楼层
Anson4 发表于 2021-2-24 10:14
同名的文件和文件夹同时存在是不可能的

不好意思,昨天没回复,刚上论坛
这个可以吧,例如 名为abc的文件和名为abc的记事本文件,可以同时存在
回复

使用道具 举报

 楼主| 发表于 2021-2-25 08:54:43 | 显示全部楼层
本帖最后由 2013kyj 于 2021-2-25 09:47 编辑
Climbing 发表于 2021-2-25 08:41
第1个问题:“如果有多个sna文件,只处理第一个”,那么以什么规则确定哪个文件是第一个,是按名字,还是按 ...

感谢大侠指点, 我可能描述的不太准确,但实际操作,真的很简单!
问题2, 我上面的举实例,下面这样描述应该就清楚了

假设当前时间是2021-02-24 7:05
D盘下有个名为888文件夹, 也有一个888.bat的批处理, 双击批处理后
888文件夹的名字就变成了: 888_2021-02-24_7-05
一份钟之后, 我又双击了批处理
888文件夹的名字就变成了: 888_2021-02-24_7-06
注意:
批处理只处理与自己名字相同前缀的文件或文件夹
回复

使用道具 举报

 楼主| 发表于 2021-2-25 09:00:23 | 显示全部楼层
Climbing 发表于 2021-2-25 08:41
第1个问题:“如果有多个sna文件,只处理第一个”,那么以什么规则确定哪个文件是第一个,是按名字,还是按 ...

第1个问题:“如果有多个sna文件,只处理第一个”,那么以什么规则确定哪个文件是第一个,是按名字,还是按日期,顺序还是倒序。所以这问题出得相当不严谨。楼主你再仔细考虑一下。

感谢大侠指点,之所以问题不严谨,实在是因为不太懂编程有排序规则
按系统默认的排序规则就可以了,但是我还真不知道系统默认是按什么规则排序的,大侠见笑了
回复

使用道具 举报

发表于 2021-2-25 09:19:12 | 显示全部楼层
本帖最后由 荣耀 于 2021-2-25 09:21 编辑

这是你的第一个要求:
搜索到所有格式,只显示第一个结果。至于怎么排序,我已经为你添加sort在里面,你可以搜索下sort 怎么使用,这个是win系统下的cmd自带命令 排序工具

  1. @echo off
  2. pushd "%~dp0"
  3. ::路径
  4. set optpath=%~dp0
  5. ::格式
  6. set format=txt

  7. ::想要倒序 在sort 添加 /r 参数
  8. for /f %%i in ('dir /b %optpath%*.%format%^|findstr "^.*\.%format%$"^|sort') do (call :result %%i)

  9. :result
  10. ::添加到变量
  11. set filename=%~1
  12. ::回显
  13. echo %~1
  14. pause
  15. exit
复制代码



点评

感谢高手帮忙,药到病除  详情 回复 发表于 2021-2-25 09:27
回复

使用道具 举报

 楼主| 发表于 2021-2-25 09:22:09 | 显示全部楼层
2010techon 发表于 2021-2-24 13:28
如果搜到一个 abc.sna 和一个 def.sna 变量“ snafilename=abc:def ”?像这样多个文件名存在一个变量里 ...

感谢大侠帮忙,昨天没在线,刚刚看到,不好意思,能修改成下面这样吗?
当我将批处理最后的两行改成如下,双击批处理后直接显示结果?
Recursively=D:\888
FileExt=sna

点评

Recursively=1是递归处理子目录,留空或者其它值不递归处理子目录 用法:1、拖拽要搜索的文件夹到批处理上, 2、双击后默认搜索当前文件夹,如果没有找到提示输入文件夹路径  详情 回复 发表于 2021-2-25 15:38
回复

使用道具 举报

 楼主| 发表于 2021-2-25 09:27:42 | 显示全部楼层
本帖最后由 2013kyj 于 2021-2-25 09:30 编辑
荣耀 发表于 2021-2-25 09:19
这是你的第一个要求:
搜索到所有格式,只显示第一个结果。至于怎么排序,我已经为你添加sort在里面,你可 ...

感谢高手帮忙,问题1完美解决,短小精悍,药到病除!

点评

sort 支持各种排序的,正序 倒序 按字母排序 时间排序,等等  详情 回复 发表于 2021-2-25 09:31
回复

使用道具 举报

发表于 2021-2-25 09:31:23 | 显示全部楼层
2013kyj 发表于 2021-2-25 09:27
感谢高手帮忙,问题1完美解决,短小精悍,药到病除!

sort 支持各种排序的,正序 倒序 按字母排序 时间排序,等等
回复

使用道具 举报

发表于 2021-2-25 09:55:25 | 显示全部楼层
我只能说楼主的逻辑依然在混乱中,完全没有听明白我在讲什么。

你的第1个问题表面上是解决了,实际上也只是混乱的得到了解决。在我看来,那个sort命令用得根本就不对。那只是纯粹的按文件名排序,如果想按日期排序呢?而系统的默认排序,应该是按存储顺序。总之,不明确这个逻辑,这个程序运行就不可能太正常,遇到特殊情况肯定立刻抓瞎。

点评

产品需求没搞清楚,难倒了一堆技术人员。。。666  发表于 2021-2-25 15:33
回复

使用道具 举报

发表于 2021-2-25 09:57:19 | 显示全部楼层

  1. E:\>dir /?
  2. 显示目录中的文件和子目录列表。

  3. DIR [drive:][path][filename] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]
  4.   [/O[[:]sortorder]] [/P] [/Q] [/R] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

  5.   [drive:][path][filename]
  6.               指定要列出的驱动器、目录和/或文件。

  7.   /A          显示具有指定属性的文件。
  8.   属性         D  目录                R  只读文件
  9.                H  隐藏文件            A  准备存档的文件
  10.                S  系统文件            I  无内容索引文件
  11.                L  重新分析点          O  脱机文件
  12.                -  表示“否”的前缀
  13.   /B          使用空格式(没有标题信息或摘要)。
  14.   /C          在文件大小中显示千位数分隔符。这是默认值。用 /-C 来
  15.               禁用分隔符显示。
  16.   /D          跟宽式相同,但文件是按栏分类列出的。
  17.   /L          用小写。
  18.   /N          新的长列表格式,其中文件名在最右边。
  19.   /O          用分类顺序列出文件。
  20.   排列顺序     N  按名称(字母顺序)     S  按大小(从小到大)
  21.                E  按扩展名(字母顺序)   D  按日期/时间(从先到后)
  22.                G  组目录优先           -  反转顺序的前缀
  23.   /P          在每个信息屏幕后暂停。
  24.   /Q          显示文件所有者。
  25.   /R          显示文件的备用数据流。
  26.   /S          显示指定目录和所有子目录中的文件。
  27.   /T          控制显示或用来分类的时间字符域
复制代码

点评

感谢!  详情 回复 发表于 2021-2-25 10:02
回复

使用道具 举报

 楼主| 发表于 2021-2-25 10:02:27 | 显示全部楼层
回复

使用道具 举报

发表于 2021-2-25 15:38:02 | 显示全部楼层
2013kyj 发表于 2021-2-25 09:22
感谢大侠帮忙,昨天没在线,刚刚看到,不好意思,能修改成下面这样吗?
当我将批处理最后的两行改成如下,双击 ...

Recursively=1是递归处理子目录,留空或者其它值不递归处理子目录
用法:1、拖拽要搜索的文件夹到批处理上(可支持多个)
2、双击后默认搜索当前文件夹,如果没有找到提示输入文件夹路径
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-29 16:04

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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