批处理脚本,重命名文件夹中的xml文件

时间:2014-02-05 06:15:12

标签: batch-file

我正在编写一个批处理文件,我可以在桌面上的文件夹中重命名xml文件名。

  • 提示用户键入文件名
  • 如果找到文件名,则会提示用户键入现有的xml文件名
  • 如果是现有的xml文件名,则会提示用户键入新的xml文件名

文件名(bb)中我的内容概述。

file

这是我的批处理脚本

  @echo off
set /p fn=Enter Folder name:  
if exist C:\Users\roberts\Desktop\%fn% (
    set /p oldxmlname=Enter a old xml file name: 
    if exist C:\Users\roberts\Desktop\%fn%\%oldxmlname%.xml (
        set /p newxmlname=Enter a new xml file name:
        ren C:\Users\roberts\Desktop\%oldxmlname%.xml %newxmlname%.xml
        echo file name changed successfully.
    )
)else (
    echo folder not found in path.
    echo C:\Users\roberts\Desktop\%fn%
)

这是我的输出。文件名完全没有变化。

output

3 个答案:

答案 0 :(得分:3)

在块语句(a parenthesised series of statements)中,解析整个块并执行然后。在块执行之前,块中的任何%var%将被该变量的值替换为块

因此,IF (something) else (somethingelse)将在遇到%variables%时使用IF的值执行。同样的评论适用于REN

解决此问题的两种常见方法是1)使用setlocal enabledelayedexpansion并使用!var!代替%var%来访问已更改的var或2}值以进行调用一个子程序,用于使用更改的值执行进一步处理。

如果使用ELSE子句,则IF - true命令必须(parenthesised) ELSE 必须位于同一物理线路上。如果ELSE - true命令为(parenthesised),则ELSE( 必须位于同一物理行上。 必须else关键字两侧的空间


示范:

@echo off
SETLOCAL
cls
set var=ORIGINAL
echo Start value of var=%var%
for %%i in (1) do (SET var=AFTER
ECHO var is %var% in the for loop
)
echo Final value of var=%var%
ENDLOCAL
ECHO.
echo ---- try again with ENABLEDELAYEDEXPANSION
ECHO. 
setlocal enabledelayedexpansion
set var=ORIGINAL
echo Start value of var=%var%
for %%i in (1) do (SET var=AFTER
ECHO var is %var% not !var! in the for loop
ECHO Note: in the loop VAR has old value %var% and new value !var!
)
echo Final value of var=%var%
endlocal

请注意,根据varsetlocal的使用情况,setlocal enabledelayedexpansion的值的解释方式会有所不同。 !var!语法仅在delayedexpansion模式下可用,并在块中修改时访问var的值,

答案 1 :(得分:1)

您将\%fn%ren命令中删除,因此您要求重命名的文件确实不存在。

您想要ren C:\Users\roberts\Desktop\%fn%\%oldxmlname%.xml %newxmlname%.xml

答案 2 :(得分:1)

这是一种不需要延迟扩展的方法,您的代码可以使用 更改变量并在循环中使用变量时,则需要延迟扩展。

有一些引号可以保护长文件/路径元素,并添加反斜杠来检测路径而不是文件。

  @echo off
set /p fn=Enter Folder name:  
if not exist "C:\Users\roberts\Desktop\%fn%\" (
   echo The engines canna take the strain captain, try again!
   goto :EOF
 )

    set /p oldxmlname=Enter a old xml file name: 
    if not exist "C:\Users\roberts\Desktop\%fn%\%oldxmlname%.xml" (
    echo folder not found in path.
    echo "C:\Users\roberts\Desktop\%fn%"
    goto :EOF
    )

        set /p newxmlname=Enter a new xml file name:
        ren "C:\Users\roberts\Desktop\%oldxmlname%.xml" "%newxmlname%.xml"
           if not errorlevel 1 (
                   echo file name changed successfully.
             ) else (
                   echo oops!  Something is fubar
           )