Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 创建.BAT文件以使用输入重命名当前目录中的文件_Batch File_Command - Fatal编程技术网

Batch file 创建.BAT文件以使用输入重命名当前目录中的文件

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

我正在尝试编写一个小的.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 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