需要批处理脚本帮助

时间:2014-01-10 18:43:30

标签: batch-file if-statement for-loop batch-rename

快乐星期五智囊团! 我需要一些Batch .BAT脚本的帮助。具体来说,我需要一些“IF语句语法”

的帮助

我有一个重命名文件的脚本。有两个文件,一个以四位数结尾,另一个以五位数结尾。这些文件将使用我之前在我的脚本中预先设置的变量重命名。

所以这是一个场景:我们在

目录中有两个文件

C:\ Users \用户名\桌面\测试-DIR

test-dir中有两个文件:

file1.12345

file2.1234

四位数结尾是一种变量类型(VAR1),而以五位数结尾的文件是另一种变量类型(VAR2)。

我需要if语句:

a)读取所选目录的所有文件(如果可能,不使用通配符)。 b)根据“。”后面的位数确定。要使用哪个变量。 c)一旦做出该确定,用适当的变量重命名该文件。

最终的重命名惯例如下:yyyymmddtype.1234 / 12345

所以基本上它会使用我已经创建的datestamp变量,我已创建的类型变量由if语句注入,并附加文件的原始结束数字。

我知道这似乎很多,但我更像是一个bash脚本人。我已经有了所有的元素,我只需要if语句,感觉就像某种for循环一样将它们组合在一起。

任何帮助都会很棒!

谢谢!

3 个答案:

答案 0 :(得分:0)

很抱歉,不是您要求的选项。而不是遍历完整列表检查每个文件的扩展一致性,迭代过滤文件列表的模式列表,重命名匹配文件与相关的“类型”

for %%v将遍历变量列表,for %%a将在模式和类型中拆分变量的内容,for %%f将生成文件列表,使用findstr进行过滤检索到的模式并使用相应的“类型”重命名匹配文件

重命名命令前面有一个echo,用于向控制台输出命令。如果输出正确,请删除echo以重命名文件。

@echo off

    rem Variables defined elsewhere
    set "folder=c:\somewhere"
    set "timestamp=yyyymmdd"

    rem Rename pattern variables in the form pattern;type
    set "var1=\.....$;type1"
    set "var2=\......$;type2"

    set "var1=\.[^.][^.][^.][^.]$;type1"
    set "var2=\.[^.][^.][^.][^.][^.]$;type2"


    setlocal enableextensions disabledelayedexpansion

    for %%v in ("%var1%" "%var2%") do for /f "tokens=1,* delims=;" %%a in ("%%~v") do (
        for /f "tokens=*" %%f in ('dir /a-d /b "%folder%" ^| findstr /r /c:"%%~a"') do (
            echo ren "%folder%\%%~f" "%timestamp%%%~b%%~xf"
        )
    )

    endlocal

答案 1 :(得分:0)

@ECHO OFF &SETLOCAL
set "yyyymmdd=yyyymmdd"
set "VAR1=VAR1"
set "VAR2=VAR2"
for /f "delims=" %%a in ('dir /b /a-d^|findstr /re ".*\....."') do echo(ren "%%~a" "%yyyymmdd%%VAR1%%%~xa"
for /f "delims=" %%a in ('dir /b /a-d^|findstr /re ".*\......"') do echo(ren "%%~a" "%yyyymmdd%%VAR2%%%~xa"

删除echo(以使其正常运行。

答案 2 :(得分:0)

如果我理解你,那么这将使用每个文件的预设变量重命名这两个文件:

for %%a in ("%userprofile%\Desktop\test-dir\*") do (
   if "%%~xa"==".12345" ren "%%a" "%variableA%-%variableB%%%~xa"
   ) else (
   ren "%%a" "%variableC%-%variableD%%%~xa"
   )
)