Windows批处理脚本,用于搜索要删除的特定文件

时间:2015-02-02 20:28:59

标签: regex windows batch-file

我需要帮助将以下Linux / Mac命令转换为Windows批处理脚本。

find / -regex ``^.*/Excel_[a-z]*.xls'' -delete 2>/dev/null
find / -regex ``^.*/presentation[0-9]*[a-z]*.ppt'' -delete 2>/dev/null

基本上使用正则表达式,我需要在给定的Windows框中找到任何.xls / .ppt文件(格式如上)并删除它们。

抱歉,我是Windows批处理文件的新手。

4 个答案:

答案 0 :(得分:1)

你真的不解释你的象形文字是什么意思。

在批处理文件中,

@echo off
setlocal
dir /s "c:\local root\Excel_*.xls"

会显示所有匹配从Excel_开始且扩展名为.xls

的文件

(如果这是您想要的,只需将dir替换为del就会删除它们;添加>nul会禁止消息;添加2>nul会删除错误消息)

如果您希望文件以Excel_开头,然后是任何alphas-only,那么

for /f "delims=" %%a in ('dir /b /s /a-d Excel_*.xls ^| findstr /E /R "\\Excel_[a-z]*\.xls" ') do echo "%%a"

dir/b(基本)形式(即。仅文件名)/s生成目录列表 - 包含子目录(附加完整目录名)和{{ 1}}抑制目录名。这通过管道传输到/a-d以过滤掉所需的文件名。结果逐行分配到findstr%%a表示“不标记数据”

应该显示符合该标准的所有文件 - 但它会区分大小写;将delims=添加到/i个开关,以使其不区分大小写。 (/ r表示findstr限制实施中的“正则表达式”; / e表示“结束” - 我倾向于使用这些findstr $用于实现转义\\ 1}}以确保文件名匹配完成(即找不到“some_prefixExcel_whatever.xls”) - 我会留下\想要做的事情......

(同样,将\.更改为echo以删除并添加重定向广告(如果需要)

另一个正则表达式 - 好吧,跟随弹跳球。看起来您希望del文件的名称以.ppt开头,然后是一系列可能的数字,然后是一系列字母。我建议

presentation

答案 1 :(得分:0)

Plain Batch无法执行此任务。但是你可以使用像Windows一样的工具来支持Regex。

此行可以从CMD执行,并删除当前文件夹中与RegEx匹配的所有文件:

for /f "eol=: delims=" %F in ('findstr /r "MY_REGEX_HERE"') do del "%F"

因此,请尝试使用此命令来获得预期结果。如果输出/结果没问题,可以在批处理脚本中嵌入这一行。 (小心,当在batchscript中嵌入这一行时,你必须加倍百分号!)

for /f "eol=: delims=" %%F in ('findstr /r "MY_REGEX_HERE"') do del "%%F"

答案 2 :(得分:0)

使用PowerShell。

get-childitem | where-object { $_.Name -match '<put a regex here>' } | remove-item

get-childitem返回文件系统对象,where-object过滤器仅选择name属性与正则表达式匹配的文件系统对象。然后,这些过滤后的项目将通过管道传递到remove-item

about_pipelines帮助主题中有关于PowerShell管道的很好的信息,您可以使用以下命令阅读该文章:

help about_pipelines

答案 3 :(得分:0)

这里有一小批要做的事:

@echo off

set /p dirpath=Where are your files ? 
:: set dirpath=%~dp0 :: if you want to use the directory where the batch file is
set /p pattern=Which pattern do you wanna search (use regex: *.xml e.g.) : 
:: combinason /s /b for fullpath+filename, /b for filename
for /f %%A in ('dir /s /b "%dirpath%\%pattern%" ^| find /v /c ""') do set cnt=%%A
echo File count = %cnt%

call :MsgBox "Do you want to delete all %pattern% in %dirpath%? %cnt% files found"  "VBYesNo+VBQuestion" "Click yes to delete the %pattern%"
if errorlevel 7 (
    echo NO - quit the batch file
) else if errorlevel 6 (
    echo YES - delete the files
    :: set you regex, %%i in batch file, % in cmd
    for /f "delims=" %%a in ('dir /s /b "%dirpath%\%pattern%"') do del "%%a"
)

:: avoid little window to popup 
exit /b

:: VBS code for the yesNo popup
:MsgBox prompt type title
    setlocal enableextensions
    set "tempFile=%temp%\%~nx0.%random%%random%%random%vbs.tmp"
    >"%tempFile%" echo(WScript.Quit msgBox("%~1",%~2,"%~3") & cscript //nologo //e:vbscript "%tempFile%"
    set "exitCode=%errorlevel%" & del "%tempFile%" >nul 2>nul
    endlocal & exit /b %exitCode%