标题: [文件操作] 批处理怎样在文件名两边/首尾添加指定前缀后缀/字符串? [打印本页]
作者: hrhktkbzyy 时间: 2011-4-15 01:19 标题: 批处理怎样在文件名两边/首尾添加指定前缀后缀/字符串?
本帖最后由 pcl_test 于 2016-9-3 19:37 编辑
想要实现为一批文件批量添加前缀,所以研究了一下批处理,先上代码:- @echo off
- setlocal enabledelayedexpansion
- echo "请输入所要添加的标题前缀[不添请回车]"
- set /p str1=
- echo "请输入所要添加的标题后缀[不添请回车]"
- set /p str2=
-
- :chose
- echo "是否应用到子文件夹中(Y/N)"
- set /p cho=
- if "%cho%"=="Y" goto 1
- if "%cho%"=="y" goto 1
- if "%cho%"=="N" goto 2
- if "%cho%"=="n" (goto 2) else (goto chose)
-
- :1
- for /f "delims=" %%i in ('dir /a-d/b/s') do (if not "%%i"==%0 ren "%%i" "%str1%%%~ni%str2%%%~xi")
- goto 3
-
- :2
- for /f "delims=" %%i in ('dir /a-d /b *.*') do (if not "%%i"==%0 ren "%%i" "%str1%%%~ni%str2%%%~xi")
- goto 3
-
- :3
- pause
复制代码
运行基本正确,但是:2部分还是修改批处理文件本身的文件名,也就是复制代码
这个判断失效,我将%%i和%0打印出来发现%0是完整路径。在下新手,不知道这个如何解决,还望高手指点。
作者: hanyeguxing 时间: 2011-4-15 01:32
本帖最后由 hanyeguxing 于 2011-4-15 01:38 编辑
以2部分为例:- :2
- for /f "delims=" %%i in ('dir /a-d /b *.*') do (if not "%%i"==%0 ren "%%i" "%str1%%%~ni%str2%%%~xi")
- goto 3
复制代码
1,在if中推荐引号在==前后对应使用,最好写成:if not "%%~i"=="%~0"
2,dir /a-d /b *.*出来的不带绝对路径,%0带路径,如果你弄不明白为了统一可以同时扩展他们都带路径
3,if比较字符串时推荐使用/i
if 写成这样就比较保险 if /i not "%%~fi"=="%~f0"
ps:顺便说一下,如果使用call,慎重使用%0
作者: hrhktkbzyy 时间: 2011-4-15 11:23
本帖最后由 hrhktkbzyy 于 2011-4-15 11:31 编辑
2# hanyeguxing
谢谢版主,查了一下帮助,明白版主的意思了。问题解决,现在贴上代码:- @echo off
- setlocal enabledelayedexpansion
- echo "请输入所要添加的标题前缀[不添请回车]"
- set /p str1=
- echo "请输入所要添加的标题后缀[不添请回车]"
- set /p str2=
-
- :chose
- echo "是否应用到子文件夹中(Y/N)"
- set /p cho=
- if "%cho%"=="Y" goto 1
- if "%cho%"=="y" goto 1
- if "%cho%"=="N" goto 2
- if "%cho%"=="n" (goto 2) else (goto chose)
-
- :1
- for /f "delims=" %%i in ('dir /a-d/b/s') do (if /i not "%%~fi"=="%~f0" ren "%%i" "%str1%%%~ni%str2%%%~xi")
- goto 3
-
- :2
- for /f "delims=" %%i in ('dir /a-d /b *.*') do (if /i not "%%~fi"=="%~f0" ren "%%i" "%str1%%%~ni%str2%%%~xi")
- goto 3
-
- :3
- pause
复制代码
作者: hrhktkbzyy 时间: 2011-4-15 11:24
本帖最后由 hrhktkbzyy 于 2011-4-15 11:26 编辑
2# hanyeguxing
另外还想探讨一个问题,就是如果我想删除一些前后缀如何实现呢。我的思路是读出每一个文件名,%%~ni,然后赋值给字符串变量,再操作字符串,但是第一步我没有成功,测试如下:- for /F "delims=" %%i in ('dir /b') do (set a="%%~nxi"&&echo %a%)
复制代码
显示echo处于关闭状态
作者: hanyeguxing 时间: 2011-4-15 11:29
本帖最后由 hanyeguxing 于 2011-4-15 11:32 编辑
- for /F "delims=" %%i in ('dir /b') do (set a="%%~nxi"&echo;!a!)
复制代码
作者: hrhktkbzyy 时间: 2011-4-15 11:40
5# hanyeguxing
不知版主测试如何,我测试的不行,输出!a!而不是a的内容
- @echo off
- for /F "delims=" %%i in ('dir /b') do (set a="%%~nxi"&echo;!a!)
- pause
复制代码
作者: hanyeguxing 时间: 2011-4-15 11:47
本帖最后由 hanyeguxing 于 2011-4-15 11:52 编辑
6# hrhktkbzyy
你原来的代码中第二行不是有 setlocal enabledelayedexpansion 吗?没有就加上- @echo off
- setlocal enabledelayedexpansion
- for /F "delims=" %%i in ('dir /b') do (set a="%%~nxi"&echo;!a!)
- pause
复制代码
setlocal enabledelayedexpansion
作用1,使用延迟的变量
作用2,开始变量本地化
关于变量延迟的问题,本论坛搜索“变量 延迟”,例如http://bbs.bathome.net/thread-3083-1-1.html
作者: hrhktkbzyy 时间: 2011-4-15 11:56
7# hanyeguxing 谢谢版主的回复,这个论坛很好,我还要多多学习。
作者: 网上邻居 时间: 2016-4-5 10:23
- @echo -----------------------------
- @ set /p GTOPERATOR="继续操作吗?(yes/no) "
-
- if /i "%GTOPERATOR:~0,1%"=="y" (
- goto GTCONTINUE
- ) else ( goto GTEXIT )
复制代码
作者: pcl_test 时间: 2016-4-5 20:58
回复 9# 网上邻居 - @echo off
- set /p c=继续操作吗(Y/N)?
- 2>nul call :%c%
- pause&exit
- :Y
- echo;%c%&goto :eof
复制代码
- @echo off
- set /a #Y=c=1
- set /p c=继续操作吗(Y/N)?
- >nul 2>&1 set #%c%&&echo;%c%
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |