Batch file 用于重命名5个文件夹的批处理文件(替换)

Batch file 用于重命名5个文件夹的批处理文件(替换),batch-file,Batch File,我想: 有5个文件夹=00、11、22、33、44(00充当虚拟对象) 4个批处理文件=BF11、BF22、BF33、BF44 我启动BF11,让文件夹11变成00,文件夹00变成x11 假设此时我启动BF44-这需要: 将当前00重命名回其原始(11)[通过查找x11的存在?] 将44重命名为00,将x11重命名为x44[00现在是x44] 现在假设我启动BF33,这需要: 将当前00重命名回其原始(44)[通过查找x44的存在?] 将33重命名为00,将x44重命名为x33[00现

我想:

  • 有5个文件夹=00、11、22、33、44(00充当虚拟对象)

  • 4个批处理文件=BF11、BF22、BF33、BF44

我启动BF11,让文件夹11变成00,文件夹00变成x11

假设此时我启动BF44-这需要:

  • 将当前00重命名回其原始(11)[通过查找x11的存在?]

  • 将44重命名为00,将x11重命名为x44[00现在是x44]

现在假设我启动BF33,这需要:

  • 将当前00重命名回其原始(44)[通过查找x44的存在?]

  • 将33重命名为00,将x44重命名为x33[00现在是x33]

对于4种组合中的每一种,依此类推

我希望这是有道理的。对于批处理文件,这可能吗?

第一部分(适当地重命名
00
)很简单:只需在每个批处理文件中使用适当的
ren
命令

您应该能够将其用于第二部分:

IF [NOT] EXIST filename command
e、 g

(其中,
xXX
取决于您所在的批处理文件,并且您每次都会忽略将
xXX
重命名为自身的行)

然而,这一切感觉有点脆弱,我想知道是否有一个更强大的解决方案来解决您的根本问题,使用配置管理系统或软链接

@ECHO OFF
SETLOCAL
cd /d "whereveryouwant"
FOR %%i IN (00 11 22 33 44) DO IF .%1==.%%i GOTO swap
ECHO invalid parameter&pause&GOTO :eof
:swap
FOR %%i IN (11 22 33 44) DO IF EXIST x%%i (
 REN 00 %%i
 IF %1==00 REN x%%i 00&GOTO :EOF 
 REN %1 00
 REN x%%i x%1
 GOTO :eof
)
IF %1==00 GOTO :EOF 
REN 00 x%1
REN %1 00
GOTO :EOF 
为了简化,这里有一个批处理文件。在编辑了
“Where you want”
作为00、11等的父目录的名称后,只需运行
thisbatch 11
(或
22
,等等)

它要做的第一件事是检查提供的参数是否有效,并回显错误消息,如果无效则暂停

然后它查找x11..x44。如果发现say
x33
,则

  • 00
    更改为
    33
  • 将(比如)从
    11
    更改为
    00
  • x33
    (虚拟对象)更改为
    x11
  • 出口
如果找不到
x33

  • 00
    更改为(比如)
    x11
  • 11
    更改为
    00
  • 出口
扭结用于输入
00
。如果
00
作为参数提供,则它将查找x11..x44。如果发现say
x33
,则

  • 00
    更改为
    33
  • x33
    (假人)更改为
    00
  • 出口
但如果找不到'x'目录,则它不会执行任何操作

因此,输入“00”将还原原始目录集-
00
作为虚拟目录

我一直使用“
GOTO:EOF
”——这是退出批处理的正常方法。在您的情况下,您可能需要将每个选项都更改为
EXIT
,以关闭
CMD
窗口


允许用户输入的修订

@ECHO OFF
SETLOCAL
CD /d "c:\wherever\your\directories\are"
SET selection=%1
IF DEFINED selection GOTO validate
:getfromuser
SET "selection="
SET /p selection="Please enter selection 11..44 : "
IF NOT DEFINED selection GOTO :eof
:validate
FOR %%i IN (00 11 22 33 44) DO IF .%selection%==.%%i GOTO swap
ECHO invalid selection %selection%&GOTO getfromuser
:swap
FOR %%i IN (11 22 33 44) DO IF EXIST x%%i (
 REN 00 %%i
 IF %selection%==00 REN x%%i 00&GOTO :EOF 
 REN %selection% 00
 REN x%%i x%selection%
 GOTO :eof
)
IF %selection%==00 GOTO :EOF 
REN 00 x%selection%
REN %selection% 00
GOTO :EOF 
基本上相同的程序,但如果未提供选择或提供无效选择,则会提示用户进行新选择。只需按enter键响应此提示即可终止程序


如果这是从快捷方式运行的,可以将所有的
GOTO:EOF
命令替换为
EXIT

嗨,谢谢你们的回答。我尝试了Peter的代码,但得到了一个无效的参数(为了确保我有一个名为k的文件夹,里面有00、11、22等。所以我用“k”更改了“whereveryouwant”)…我现在要尝试第一个示例,您可能需要使用
C:\k
-完整路径。当你运行批处理时,你需要运行
这个批处理11
(或者22,或者33,44或者00)如果你没有给它一个参数,或者给它一个不是这五个参数之一的参数,它将显示
无效参数
。好吧,我花了3个小时来尝试我认为是一切的东西和谷歌代码,但无法让它工作。。。如果有人能带领我前进,那就太好了。。(也可以治疗头痛!)假设你正在为“切换到11”到“切换到44”中的每一个设置一个快捷方式,那么你的快捷方式的属性“Target”将是
C:\where\you\put\the\batch\whateveryouvecalledthebatch.bat
您需要将此更改为
C:\where\you\put\the\batch\whateveryouvecalledthebatch.bat 11
更改为
11
,我将把您留给您的一瓶阿司匹林,让您为
22
想一想办法,
33
44
。而且
00
会将您重置到起始位置-不
x
目录-开始时只有00..44。Peter,谢谢-它工作得非常完美。不知道我必须更改快捷方式属性!一旦一切都清楚了,再弄清楚剩下的,瓶子就没必要了。。。昨天我以为我对它有点了解。。。在我的圈子之外。。。再次感谢您的慷慨帮助!
@ECHO OFF
SETLOCAL
CD /d "c:\wherever\your\directories\are"
SET selection=%1
IF DEFINED selection GOTO validate
:getfromuser
SET "selection="
SET /p selection="Please enter selection 11..44 : "
IF NOT DEFINED selection GOTO :eof
:validate
FOR %%i IN (00 11 22 33 44) DO IF .%selection%==.%%i GOTO swap
ECHO invalid selection %selection%&GOTO getfromuser
:swap
FOR %%i IN (11 22 33 44) DO IF EXIST x%%i (
 REN 00 %%i
 IF %selection%==00 REN x%%i 00&GOTO :EOF 
 REN %selection% 00
 REN x%%i x%selection%
 GOTO :eof
)
IF %selection%==00 GOTO :EOF 
REN 00 x%selection%
REN %selection% 00
GOTO :EOF