带"菜单"的批处理文件用于删除引用文本文件路径的文件

时间:2015-08-19 13:20:47

标签: batch-file

大家好日子,

如果我的问题看似奇怪,请原谅我。我无法确定过去适合我希望完成的理想剧本的例子。

目前,我有以下脚本。基本上是从文件夹中列出位置的文件夹中删除文件(del_location.txt)。

For /F "tokens=*" %%A in (del_location.txt) do del \Q "%%A"

我没有选择使用Forfiles,因为我在公司工作的网络是在Windows 2000而无法运行Forfiles,并且由于安全原因,无法安装任何补丁。

del_location.txt中有多个位置,我的用户可能不希望删除所有列出的位置。因此我想知道如何写一个"菜单"函数,用于读取del_location.txt中列出的位置,并将ECHO作为选择。让用户在删除序列开始之前以是/否方式选择选择?从而允许用户走开"走开"选择他想要删除的内容后,从终端开始。

*此外,据我所知,在没有Forfiles的情况下,我无法选择仅删除超过N天的文件。我这样说是对吗?

非常感谢您的帮助和建议。

1 个答案:

答案 0 :(得分:1)

您可以将 del_location.txt 中的每一行set添加到数组中。由于批处理不支持数组,因此我们需要手动完成。

@echo off
setlocal enabledelayedexpansion

:main
set lines=0

For /F "tokens=*" %%A in (del_location.txt) do (
    set array[!lines!]=%%A
    set /a lines+=1
    echo !lines!^) %%A
)

echo. & echo.
set /p choice=Which file do you want to delete? ^>

if %choice% lss 1 goto main
if %choice% gtr %lines% goto main

set /a choice-=1

del /Q !array[%choice%]!
echo. & echo.
echo "!array[%choice%]!" was deleted successfully ^^!
echo. & echo.
choice /c:yn /m "Do you want to delete more files? [y/n]" /n
if %errorlevel% == 1 goto main
if %errorlevel% == 2 exit /b

此脚本仅为每回合删除1个文件提供。因此,如果您想批量删除,请尝试自行修改,如果您遇到困难,请向任何人或我询问。

我认为有一种方法可以根据forfiles方法以外的日期删除文件。顺便说一下,dir SOURCE /o:d根据日期列出和整理文件。