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

时间:2016-01-16 15:43:39

标签: batch-file select path filenames uppercase

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

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

2 个答案:

答案 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"
)

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