C# 应用程序到批处理文件

本文关键字:批处理文件 应用程序 | 更新日期: 2023-09-27 18:30:47

我需要一点帮助,希望你们中的一个人能帮助我。

我有一个路径(目录),其中有很多文件夹。在这些文件夹中,有很多我一无所知的子文件夹和文件。所以我不知道它们下面有多少个子文件夹和子文件夹以及文件。这是一个文件夹的大树。我的任务是创建一个脚本,可以检查文件夹或文件是否已存在 72 小时,如果是,则需要删除该文件夹。这意味着我有一个包含很多文件夹的路径。

一个例子是名为ANSYS的文件夹。ANSYS中有许多子文件夹和文件。我必须检查所有ANSYS文件夹,看看该文件夹及其子文件夹中是否有任何文件是72小时前的。如果ANSYS中的所有内容都是72小时,则必须删除整个ANSYS。我已经制作了一个可以完成我工作的 C# 应用程序,但我需要在数百台服务器上使用应用程序,我没有时间在所有服务器上安装 .NET 框架。这就是为什么我必须使用可以做同样事情的 bash 脚本。

以下是我的 C# 应用程序,您可以查看以了解更多我的作业:

using System;
using System.IO;
namespace Scripts
{
internal class Program
{
    private static void Main(string[] args)
    {
        //Defines the main path.
        var topPath = @"C:'Ansys_RSM_Work_DIR'";
        //Converts the first argument written as a parameter in TaskScheduler or CMD,       called 'hours'.
        string argument = args[0];
        int hours = Int32.Parse(argument);
        //Defines the timespan in which a file has to be modified. 
        var deleteIfNotModifiedIn = new TimeSpan(hours, 0, 0);
        //Is set to true if the file file has been modified within the timespan.
        bool fileTooOld = false;
        //Searches through all directories in topPath, one at a time.
        foreach (var dir in Directory.GetDirectories(topPath))
        {
            //Searches through all files in directory, one at a time.
            foreach (var file in Directory.GetFiles(dir, "*", SearchOption.AllDirectories))
            {
                //Calculate the difference between now and lastWriteTime = fileLastModified.
                var fileLastModified = DateTime.Now - File.GetLastWriteTime(file);
                if (fileLastModified < deleteIfNotModifiedIn)
                    fileTooOld = true;
            }
            if (fileTooOld == false)
                Directory.Delete(dir, true);
            else
                fileTooOld = false;
        }
    }
}
}

我已经尝试制作脚本,但是如果其中的文件是 72 小时前的,我制作的脚本会删除一个子文件夹,它不应该这样做。仅当ANSYS中的所有文件和ANSYS中的所有子文件夹自过去72小时以来未被修改时,才应删除第一个文件夹(即ANSYS):我的脚本:

FORFILES /S /D -3 /C "cmd /c IF @isdir==TRUE rd /S /Q @path" 
for /f "delims=" %i in ('dir /s /b /ad ^| sort /r') do rd "%i"

谁能帮我?

亲切的问候沙班·马哈茂德

C# 应用程序到批处理文件

好的,尝试这样的事情:

程序.bat

@echo off
pushd  C'...[Taret folder containg folders to check, that is containing ANSYS]
set /p check="Date after which to check: "
Rem When prompted with above line type the date 3 days ago.
forfiles /c "cmd /c (IF @isdir==TRUE search "@path" "%check%")"
popd

并在同一目录中:

搜索.bat

set del=TRUE
forfiles /p %1 /d +%2 /s /m *.* /c "cmd /c (set del=FALSE)"
Pause |Echo Deleting %1... Exit to cancel
if %del%==True (rd /s %1)

这应该有效,请注意,它将在删除每个文件之前暂停。它的工作方式是它会检查 filder 中的任何文件是否小于 72 小时,如果有,它不会删除该文件夹。它将对指定文件夹中的每个文件夹执行此操作。search.bat 文件是可以使用文件夹路径调用的文件,它将按照您指定的要求搜索该父文件夹中的所有文件。程序.bat为您完成第一步。

我让它暂停以防万一出现故障(或根本不起作用),如果是这种情况,请告诉我它在哪里不起作用。另外,如果您需要解释,请发表评论。

蒙纳