在批处理脚本中替换而不是添加前缀



我正在写一个批处理脚本文件,以添加前缀到所有的。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

既然这是一个家庭作业问题,我就给你一些提示:

  1. 执行dir /b /a-d "%1"命令列出现有文件名,并将此列表重定向到临时文件,例如temp.dat

  2. 使用set /p oldfilename<temp.dat

    将该文件的第一行读取到变量中
  3. 使用findstr /v /x /L /c:"%oldfilename%" <temp.dat >temp2.dat从列表中删除文件名,该列表查找temp.dat中(/v)不匹配(/x)的所有字符串(/L)完全(/c:"somestring")字符串并将结果重定向到temp2.dat

  4. temp2.dat移动到temp.dat上,这样你就有了一个包含新列表的新temp.dat文件

  5. 重命名文件%oldfilename%

  6. 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%==0if 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

相关内容

  • 没有找到相关文章

最新更新