我正在寻找帮助创建BAT文件以帮助删除特定文件名长度的视频和图像。
一些背景知识:
我们有一个定制的应用程序,我们没有源代码。它会从Feed中更新其视频。最近我们一直在检测到缓冲区溢出"错误。我们认为超过90个字符的文件名正在成为一个问题。
我想在它们成为问题之前删除这些WMV和JPG文件。我们通常使用bat文件来执行这些小任务。
答案 0 :(得分:1)
我认为这是最简单的方法:
@echo off
setlocal EnableDelayedExpansion
for %%a in (*.WMV *.JPG) do (
set "filename=%%a"
if "!filename:~90!" neq "" (
ECHO del "%%a"
)
)
答案 1 :(得分:0)
不要使用特定于操作系统的东西,使用可在任何平台上运行的脚本语言,例如: Node.js的
var fs = require("fs");
var folderName = __dirname; // for current folder
var maxlength = 90;
function getFiles(dir, files_) {
files_ = files_ || [];
var files = fs.readdirSync(dir);
for ( var i in files) {
var name = dir + '/' + files[i];
if (fs.statSync(name).isDirectory()) {
getFiles(name, files_);
} else {
files_.push(name);
}
}
return files_;
}
var files = getFiles(folderName);
console.log(files);
for (var i = 0; i < files.length; i++) {
filename = files[i];
if (filename.length > maxlength) {
console.log("Deleting " + filename);
fs.unlinkSync(filename);
}
}
答案 2 :(得分:0)
没有外部工具(未经测试):
@echo off
rem:::: set the correct directory
set "rootdir=c:\somewhere"
pushd "%rootdir%"
setlocal enableDelayedExpansion
for %%# in (*.WMV *.JPG) do (
call ::strlen0 "%%~nx#" len
if !len! GEQ 90 (
rem:::: remove the echo if the correct files are listed
echo del /q /f "%%~nx#"
)
)
endlocal
exit /b 0
:strlen0 StrVar [RtnVar]
setlocal EnableDelayedExpansion
set "s=#!%~1!"
set "len=0"
for %%N in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
if "!s:~%%N,1!" neq "" (
set /a "len+=%%N"
set "s=!s:~%%N!"
)
)
endlocal&if "%~2" neq "" (set %~2=%len%) else echo %len%
exit /b
注意评论 - 这些是您需要更改脚本的地方。