Board logo

标题: [文件操作] 批处理命令ren修改文件名为何出错? [打印本页]

作者: 小怪才    时间: 2014-6-28 15:50     标题: 批处理命令ren修改文件名为何出错?

  1. @echo off
  2. for /f "tokens=*" %%i in ('dir /b /ad') do (
  3. ren "%%i" "dfdfdf"
  4. )
复制代码
功能是把所在目录的所有文件夹,都改名 成dfdfdf
就不知道为什么会这样。。。

新^n 手,对批处理还是刚接触
作者: szl1123    时间: 2014-6-28 15:56

我也是新手
一个文件夹里面不能出现两个名字相同的文件,文件夹,我觉得"dfdfdf"这个要写成变量比如"dfdfdf%time%"
作者: 小怪才    时间: 2014-6-28 16:51

对啊,竟然没想到,我改改,这个论坛真好,不然有问题都不知道问谁说去
作者: 小怪才    时间: 2014-6-28 16:55

怎么这样
作者: CrLf    时间: 2014-6-28 17:31

本帖最后由 CrLf 于 2014-6-28 23:35 编辑

回复 4# 小怪才


    文件名不能含这些字符: \ / : * ? " < > |,而 %time% 和 %date% 中有 / 和 :,所以未处理不能直接用作文件名
    而且还有个问题,这么短的时间内对 time 两次取值不是很容易重复吗?
可以变通下用递增序号:
  1. @echo off
  2. for /f "tokens=*" %%a in ('dir /b /ad') do (
  3. set "oldName=%%i"
  4. set /a n+=1
  5. setlocal enabledelayedexpansion
  6. ren "!oldName!" "dfdfdf_!n!%%~xa"
  7. endlocal
  8. )
复制代码
其实可以不用脚本,这里键鼠操作反而比敲代码更快捷,分享一个技巧:
  1. 1、视窗中按类型排序,以便把文件夹集中到一起
  2. 2、鼠标拖选所有要更名的文件夹
  3. 3、对第一个文件夹按 F2 或在右键菜单里选重命名
  4. 4、输入新文件夹名,回车搞定
复制代码

作者: 小怪才    时间: 2014-6-28 22:08

回复 5# CrLf

ren "!oldName!" "dfdfdf_!n!%%~xa"
大侠,这一句 后面的 %%~xa 怎么看???


我百度了下,看到了个类似的,
将多个文件夹依次改名 成 B01、B02、B03...
代码如下:
@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=*" %%i in ('dir /b /ad') do (
set /a a+=1
set b=00!a!
ren  "%%i"   "B!b:~-2!"
)
同样, 最后一行   ren  "%%i"   "B!b:~-2!"看不懂。。。 (感叹号!我可以理解,是那个变量延迟的原因)
作者: CrLf    时间: 2014-6-28 22:45

%%~xa 是对 %%a 的扩展,翻到 for /? 第五页,脚本里的 %%a 相当于命令行下一个 %a,知道这个一看就懂了...
!b:~-2! 是变量偏移的用法,翻到 set /? 第三、四页,有详细的例子
作者: Batcher    时间: 2014-6-28 23:20

回复 6# 小怪才


批处理命令set截取字符详解
http://bbs.bathome.net/thread-996-1-1.html

批处理命令set变量字符截取点点通
http://bbs.bathome.net/thread-40-1-1.html

批处理命令set截取字符练习工具
http://bbs.bathome.net/thread-1149-1-1.html
作者: 小怪才    时间: 2014-6-28 23:24

回复 7# CrLf


    哦,还有就是你前面都没定义%%a,怎么就直接拿来用了?
作者: CrLf    时间: 2014-6-28 23:36

回复 9# 小怪才


    笔误,已修改~




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2