我正在写一个批处理脚本文件,以添加前缀到所有的。txt文件在同一文件夹与批处理文件
@echo off
if "%1"=="" (
exit /b
)
:loop
if "%1"=="" goto end
rename "%1" "abc%1"
shift
goto loop
:end
我在cmd中这样调用这个文件:
file.bat *.txt
然而,我不明白为什么这个代码替换前缀。例如,如果我有textfile.txt这使它abctfile.txt,但我需要添加前缀,使它abctextfile.txt。这是我的任务,使用标记和goto,而不使用for命令。
我尝试了这段代码,为for命令工作。我也试着把它添加到文件名的末尾。例如textfile.txt =比;textfile.txtabc
既然这是一个家庭作业问题,我就给你一些提示:
-
执行
dir /b /a-d "%1"
命令列出现有文件名,并将此列表重定向到临时文件,例如temp.dat
-
使用
将该文件的第一行读取到变量中set /p oldfilename<temp.dat
-
使用
findstr /v /x /L /c:"%oldfilename%" <temp.dat >temp2.dat
从列表中删除文件名,该列表查找temp.dat
中(/v)不匹配(/x)的所有字符串(/L)完全(/c:"somestring"
)字符串并将结果重定向到temp2.dat
-
将
temp2.dat
移动到temp.dat
上,这样你就有了一个包含新列表的新temp.dat
文件 -
重命名文件
%oldfilename%
-
go back to (2)
进一步提示:
判断文件中是否有文本数据,使用
set "var="
set /p var=<filename
if "%var%"=="" goto nomoredata
第一行确保var
为"空"。第二种是从文件中读取,将var
设置为或者将其保留为"空"如果文件中没有数据
从技术上讲,将变量设置为empty将从环境中删除该变量。您还可以通过使用if [not] defined var
来测试变量是否为空—其中not
是可选的(这就是为什么它显示在[方括号]中)—但可能您还没有遇到过。
命令可能生成一个正常的响应(如dir
将生成一个文件列表),也可能生成一个错误响应(如当它不能重命名文件时)。有时压抑这种反应是可取的。将>nul
附加到该行将抑制正常响应,2>nul
将抑制错误响应。
如果你有一个错误响应,变量errorlevel
通常会被设置为非零(零意味着"没有错误")。立即在执行命令(例如ren
)之后,可以测试errorlevel
以确定是否存在错误。有两种常见的方式:if %errorlevel%==0
和if errorlevel n
(其中n
是数字)。第一个测试errorlevel
完全等于0
(尽管==
也可以是大于或等于geq
,0
可以是任何数字以适应各种情况)。第二个表示'如果错误级别为n或大于n。
ren
只在重命名成功时才会将errorlevel
设置为0
。
现在假设您使用abc
作为文件的前缀,并且您现有的文件为
123abc.txt
456abc.txt
789abc.txt
abc456abc.txt
当你将456abc.txt
重命名为abc456abc.txt
时,ren
将反对,因为该文件名已经存在,并且它将将errorlevel
设置为1
。
如果在ren命令后面的行您编写if %errorlevel% neq 0 echo %oldfilename%>>temp.dat
,然后456abc.txt
将追加(>>
)到文件;之后abc456abc.txt
将被重命名为abcabc456abc.txt
,然后456abc.txt
可以被重命名为abc456abc.txt