本帖最后由 tonyabbs 于 2016-11-6 11:21 编辑
需要拖放到批处理的文件,根据其文件名 、创建时间、当时时间,进行更名。批处理不能运行,但将批处理中的语句行复制到CMD是可以运行的。请教各位!(学习了论坛跟文件名字符串处理相关的若干文章,没有找出这段代码的问题)
比如文件名为“基于(山水为体,文化为魂)理念的旅游产业开发研究.txt” 想要修改为 "4R161105_基于(山水为体,文化为魂)理念的旅游产业开发研究_TonyQ_1942.txt"(其中,161105是今天的日期,1942是当前的时间)
把“基于(山水为体,文化为魂)理念的旅游产业开发研究.txt“拖到这个BAT上,屏幕显示如下:
file_suffix = _TonyQ_2051
请按任意键继续. . .
file_name= 基于(山水为体
file_prename=基于(山水为体
file_extname=
基于(山水为体中的空格已经改为_ ,文件 全 名 改为基于(山水为体
基于(山水为体中的空格已经改为_ ,文件名 改为基于(山水为体
基于(山水为体中的括号已经改为( ,文件 全 名 改为基于(山水为体
括号已经改为( ,文件名 改为基于(山水为体
基于(山水为体中的括号已经改为) ,文件 全 名 改为基于(山水为体
括号已经改为) ,文件名 改为基于(山水为体
基于(山水为体中的加号已经改为: ,文件 全 名 改为基于(山水为体
加号已经改为: ,文件名 改为基于(山水为体
请按任意键继续. . .
没有达到预期的想要更名为"4R161105_基于(山水为体,文化为魂)理念的旅游产业开发研究_TonyQ_1942.txt"(其中,161105是今天的日期,1942是当前的时间)的效果
出现的问题:1、file_name并没有取得文件的全名;2、更不要提后面的ren命令能运行了
另外我想请教下
for /f "tokens=*" %%I in ("%1") do (
和for /f "delims=" %%I in ("%~1") do (
这两种写法有啥不同?我的本意是取得拖放到BAT的文件名变量- @echo off&setlocal enabledelayedexpansion
- :ADDREM
- IF %1.==. GOTO END
- set thefile=%1
- set/a g=%time:~0,2%,h=g+100
- set "file_suffix=_TonyQ_%h:~-2%%time:~3,2%"
- echo file_suffix = %file_suffix%
- for /f "delims=" %%I in ("%~1") do (
- set "file_name=%%~nxI"&set "file_prename=%%~nI"&set "file_extname=%%~xI"
- echo file_name= !file_name!&echo file_prename=!file_prename!&echo file_extname=!file_extname!
- set "file_name0=!file_name: =_!"&echo !file_name!中的空格已经改为_ ,文件 全 名 改为!file_name0!
- set "file_prename=!file_prename: =_!"&echo !file_prename!中的空格已经改为_ ,文件名 改为!file_prename!
- set "file_name1=!file_name0:%(=(!"&echo !file_name0!中的括号已经改为( ,文件 全 名 改为!file_name1!
- set "file_prename1=!file_prename:%(=(!"&echo 括号已经改为( ,文件名 改为!file_prename1!
- set "file_name2=!file_name1:%)=)!"&echo !file_name1!中的括号已经改为) ,文件 全 名 改为!file_name2!
- set "file_prename2=!file_prename1:%)=)!"&echo 括号已经改为) ,文件名 改为!file_prename2!
- set "file_name3=!file_name2:%+=:!"&echo !file_name2!中的加号已经改为: ,文件 全 名 改为!file_name3!
- set "file_prename3=!file_prename2:%+=:!"&echo 加号已经改为: ,文件名 改为!file_prename3!
- ::以下语句ren没有执行
- ren "!file_name!" "!file_name3!"
- for %%a in ("!file_name3!") do (
- set "file_pre=4R%date:~2,2%%date:~5,2%%date:~8,2%_"&echo file_pre= !file_pre!
- set "file_new=!file_pre!!file_prename3!!file_suffix!!file_extname!"&echo file_new= !file_new!
- )
-
- ren "!file_name3!" "!file_new!"
-
- echo %thefile% 已经阅读完毕并更名为 !file_new!
- )
- shift
- goto ADDREM
- :DEAL
- echo %%1 = %1
- :END
- echo OK
- pause
复制代码
|