【问题标题】:How to make a batch file to run on selected path?如何使批处理文件在选定路径上运行?
【发布时间】:2016-01-16 15:43:39
【问题描述】:

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

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

【问题讨论】:

    标签: batch-file select path filenames uppercase


    【解决方案1】:

    编辑:您关于“让用户选择运行.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 : "");
    

    【讨论】:

    • 非常感谢您!我真的很感激。尽管给了我解决方案,但我真的很想了解它背后的代码,因为我对批处理文件语言有点陌生。另外,我该怎么做才能让用户选择一个目录来应用.bat(用户选择一个文件夹,每次.bat被激活时它都会在其中运行)?
    • 查看我的回答中的编辑。如果您想要更清晰的答案,请发布更清晰的问题...
    • 对不起。让我更清楚。我希望一旦用户单击批处理文件,它将打开他/她在 PC 中选择文件夹的选项,如本主题:stackoverflow.com/questions/15885132/… 选择的路径将用于执行其余的代码。我只是不知道如何在两者之间混合。
    • 我怎么知道呢?我不是读心术! :/ 无论如何,请看我的第二次编辑...
    • 再次 - 对不起,我真的很感谢你的所有帮助,但似乎在激活我上面提到的主题的示例代码时,它让我可以选择我电脑中的所有文件夹,在激活您的第二次编辑代码时,我只能从“我的文档”文件夹中选择?再次感谢,我非常感谢您的所有帮助。
    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,但是让用户在激活批处理文件时选择一个目录怎么样?
    • 所以在开头添加 cd %1。
    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    相关资源
    最近更新 更多