Batch file 创建.BAT文件以使用输入重命名当前目录中的文件
我正在尝试编写一个小的.bat脚本(编程知识有限),允许用户输入当前版本号(例如01)和新版本号(例如02)的值,然后在重命名命令中使用这两个数字Batch file 创建.BAT文件以使用输入重命名当前目录中的文件,batch-file,command,Batch File,Command,我正在尝试编写一个小的.bat脚本(编程知识有限),允许用户输入当前版本号(例如01)和新版本号(例如02)的值,然后在重命名命令中使用这两个数字 echo off cls TITLE Version Updater echo Use this script to update file names. This works similar to find and replace in other programs. echo[ echo Enter the current version num
echo off
cls
TITLE Version Updater
echo Use this script to update file names. This works similar to find and replace in other programs.
echo[
echo Enter the current version number (01 for example)
echo off
set /p current="Current Version: "
echo[
echo Enter the new version number (01 becomes 02 etc.)
echo off
set /p new="New Version: "
echo[
echo You will be updating all occurences of "%current%" in your file names to "%new%", if this is correct then continue, if not close this window.
pause
cd %CD%
rename *%current%* *%new%*
pause
我认为代码几乎是正确的,我只是在让它引用运行它的当前目录时遇到了麻烦。我正在与计算机技能有限的人一起使用此脚本,而我不是网络管理员,因此我无法真正深入地做任何事情
如果有人能帮我调整一下,那就太好了
干杯
垫子
编辑1-评论回复
例如,test_01.tab更改为test_02.tab。它基本上会替换文件名的所有_01部分,并将它们更改为_02。在这种情况下,当前=01,新=02。但是文件名都是不同的,所以您可能需要更改test_01.bat,testing_01.bat,所以我认为将01重命名为02是可行的
@pushd %~dp0
@Echo off
CLS
setlocal enabledelayedexpansion
set /p current="Current Version: "
set /p new="New Version: "
for /R %%a in (*_%current%*) do (
set "Name=%%~a"
ren "%%~a" "!Name:_%current%=_%new%!"
)
pause
编辑2-当前代码
这要感谢下面的Stephan,我相信它唯一需要正确工作的是从REN命令的第二部分删除文件路径,这样它就有了文件和扩展名,应该可以正常工作
@pushd %~dp0
@Echo off
CLS
setlocal enabledelayedexpansion
set /p current="Current Version: "
set /p new="New Version: "
for /R %%a in (*_%current%*) do (
set "Name=%%~a"
ren "%%~a" "!Name:_%current%=_%new%!"
)
pause
编辑3-最终代码(工作,耶!)
这应该能奏效
@Echo off
set /p current="Current Version: "
set /p new="New Version: "
for /R "c:\your location" %%a in (*_%current%.*) do (
ren *_%current%.* *_%new%.*
)
pause
下面是在几个测试文件上运行脚本之前和之后
(如果输出满足您的要求,请删除ECHO)您能举例说明它应该做什么吗?例如,它应该重命名哪些文件名?什么样的%current%和%new%可能是…?例如,test_01.tab更改为test_02.tab。它基本上会替换文件名的所有_01部分,并将它们更改为_02。在这种情况下,当前=01,新=02。但是文件名都不同,所以您可能需要更改test_01.bat,testing_01.bat,所以我认为将01重命名为02是可行的。请通过编辑您的帖子将此附加信息放入问题中!做了一系列测试,为您找到了解决方案。发布它作为答案。嘿,玛兹,我尝试了这个代码,我得到了以下回报。当前版本:01,新版本:02,系统找不到指定的文件。系统找不到指定的文件。系统找不到指定的文件。按任意键继续…这很奇怪。我们说话时,我正在电脑上运行脚本,它就像一个符咒。如果你复制粘贴我的准确脚本并重试,它会给你同样的结果吗?可以作为管理员运行脚本,或者在脚本中的Echo off下面添加
setlocal enabledelayedexpansion
。?Hrm,所以在我将.bat文件拖到cmd窗口中,然后不做任何操作之前,我试着从文件夹中以管理员的身份运行它,它只是要求版本,然后什么也没做。我认为值得一看的一个想法是,当我尝试上面Stephan的另一个评论时,它为目录提供的回显输出是Users\Business\AppData\Roaming\TS3Client\logs\TS3Client\u 20etc.log。。。。将.bat拖动到cmd中可能会出现问题吗?您也可以尝试将您的位置添加到脚本中,如下所示:中的/R“c:\your location”%%a,然后像我的回答中那样添加其余位置。我更新了我的答案。请注意,脚本必须1)位于要编辑文件的文件夹中,或者2)必须指定脚本在脚本中的运行位置。为了响应我下面所说的,我尝试了这个脚本,它产生了有趣的结果。出现的前3个ren用于Users\Business\AppData\Roaming\等中的随机文件。。。但是第四个在桌面上的测试文件夹里,我有这个。我只是将脚本拖到cmd中,我想知道它是否在它的位置上被弄糊涂了。如何添加一张cd/d“c:\my test folder”
。有没有一种方法我不必把它变成硬编码的东西?此脚本将在许多不同的位置使用。我有点希望它可以运行,然后工作。它应该如何知道,处理哪个位置?存储脚本的文件夹?cmd
窗口的当前工作目录?还有什么?这里没有语法错误。是否有带有标记(!
)的文件?这可能会破坏语法
@Echo off
setlocal enabledelayedexpansion
set /p current="Current Version: "
set /p new="New Version: "
for /R %%a in (*_%current%.*) do (
set "Name=%%~nxa"
ECHO ren "%%~a" "!Name:_%current%=_%new%!"
)
pause