如何在选定路径上制作批处理文件 运行?
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"
)
您唯一需要做的就是完成那里的字母表。
我正在尝试创建一个 .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"
)
您唯一需要做的就是完成那里的字母表。