如何在选定路径上制作批处理文件 运行?

How to make a batch file to run on selected path?

我正在尝试创建一个 .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"

我希望我所要求的是可能的,非常感谢您提供的任何帮助。

编辑:您对"let the user select the folder where the .bat file run"的要求不够明确;但是,我为此修改了以下代码:

第二次编辑:我修改了我的解决方案,以便使用其中一种方法 select 在 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 : "");

这是 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"
)

您唯一需要做的就是完成那里的字母表。