快乐星期五智囊团! 我需要一些Batch .BAT脚本的帮助。具体来说,我需要一些“IF语句语法”
的帮助我有一个重命名文件的脚本。有两个文件,一个以四位数结尾,另一个以五位数结尾。这些文件将使用我之前在我的脚本中预先设置的变量重命名。
所以这是一个场景:我们在
目录中有两个文件C:\ Users \用户名\桌面\测试-DIR
file1.12345
file2.1234
四位数结尾是一种变量类型(VAR1),而以五位数结尾的文件是另一种变量类型(VAR2)。
我需要if语句:
a)读取所选目录的所有文件(如果可能,不使用通配符)。 b)根据“。”后面的位数确定。要使用哪个变量。 c)一旦做出该确定,用适当的变量重命名该文件。
最终的重命名惯例如下:yyyymmddtype.1234 / 12345
所以基本上它会使用我已经创建的datestamp变量,我已创建的类型变量由if语句注入,并附加文件的原始结束数字。
我知道这似乎很多,但我更像是一个bash脚本人。我已经有了所有的元素,我只需要if语句,感觉就像某种for循环一样将它们组合在一起。
任何帮助都会很棒!
谢谢!
答案 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"
)
)