我正在尝试创建一个.bat
文件,该文件将更改用户在所选文件夹上的文件名。我们的想法是在文件名称的末尾添加一个子字符串,除非它们已经有了它(如水印签名)。
例如:
filename.mp4
将成为filename.made_by_me.mp4
文件可以来自以下类型:.avi
.mkv
.mp4
我还希望它能够检查文件名是否包含大写。
如果是,则会将.Made_By_Me
而不是.made_by_me
添加到文件名中。
最后,如果文件名已包含子字符串,则不会再次添加。
到目前为止我的代码:
for /f "delims=" %%a in ('dir /b /a-d *.avi *.mkv *.mp4 ^|findstr /iv ".Made_by_me"') do ren "%%~a" "%%~na.Made_by_me%%~xa"
我希望我所要求的是可能的,并且非常感谢您提供的任何帮助。
答案 0 :(得分:2)
编辑:您的“让用户选择运行.bat文件的文件夹”的请求不够清晰;但是,为了这样做,我修改了下面的代码:
第二次编辑:我修改了我的解决方案,以便使用其中一种方法根据评论中的要求选择this question 中提供的文件夹;我使用了最简单的一个(WSH Shell.Application对象BrowseForFolder)。
@if (@CodeSection == @Batch) @then
@echo off
setlocal EnableDelayedExpansion
rem Select the folder via WSH Shell.Application BrowseForFolder method
for /F "delims=" %%a in ('cscript //nologo //E:JScript "%~F0"') do set "folder=%%a"
if not defined folder goto :EOF
cd "%folder%"
for /F "delims=" %%a in ('dir /B /A-D *.avi *.mkv *.mp4 ^| findstr /I /V ".made_by_me"') do (
set "fileName=%%a"
rem Convert the file name to lowercase letters
for %%a in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
set "fileName=!fileName:%%a=%%a!"
)
if "!fileName!" equ "%%a" (
rem The original file name have all lowercase letters
ren "%%a" "%%~Na.made_by_me%%~Xa"
) else (
rem The original file name include at least one uppercase letter
ren "%%a" "%%~Na.Made_By_Me%%~Xa"
)
)
goto :EOF
@end
// JScript section
var shl = new ActiveXObject("Shell.Application");
var folder = shl.BrowseForFolder(0, "Please choose a folder.", 0, 5);
WSH.echo(folder ? folder.self.path : "");
答案 1 :(得分:1)
这是Aacini解决方案的替代方案:
@echo off
setlocal enabledelayedexpansion
for %%a in (*.avi *.mkv *.mp4) do (
set x=%%a
set sign=made_by_me
for %%u in ("A=a" "B=b") do if not "!x:%%~u!" == "!x!" set sign=Made_By_Me
if !sign! == made_by_me if "!x:made_by_me=!" == "!x!" ren "%%a" "%%~na.!sign!%%~xa"
if !sign! == Made_By_Me if "!x:Made_By_Me=!" == "!x!" ren "%%a" "%%~na.!sign!%%~xa"
)
你唯一需要做的就是完成那里的字母表。