我需要帮助将以下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批处理文件的新手。
答案 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%