草庐IT

windows - 手动删除和脚本删除的区别?! ( bat 或vbs)

coder 2024-06-09 原文

我目前正在尝试在运行程序时自动删除程序的文件。如果我在 Windows 中手动删除文件,程序会识别更改,但如果我使用脚本删除文件,不会

不过,所有文件都会被删除。我尝试了一个 bat 和一个 vbs 脚本,手动执行脚本和/或通过程序内的调用执行脚本 - 总是得到相同的结果:手动删除被识别,脚本删除不被识别。我应该提一下,我可以从 LUA 4.0 调用一个脚本/可执行文件,它会自动删除文件,这对我来说很重要。

如果我在 Windows 中删除一个文件,究竟会发生什么?它与通过脚本删除有何不同?有没有办法 100% 模拟 Windows 删除例程?或者是否有一些我不知道的 secret “文件夹已更新”标志?自然文件夹属性 DateLastAccessedDateLastModified 得到更新。

为了完整起见,这里是我的脚本(它们删除任何适合 *Random*.level 的现有文件并删除空文件夹):

bat 侠:

REM delete all "Random" maps
del /S *Random*.level
REM remove empty folders
for /f "delims=" %%d in ('dir /S /B /A:D ^| sort /r') do rd "%%d"

VBS:

' create shell
Set objShell = CreateObject("Wscript.Shell")
' get current path
strPath = objShell.CurrentDirectory
' create file system object
Set oFSO = CreateObject("Scripting.FileSystemObject")
' delete all random level files
ProcessSubFolders oFSO.GetFolder(strPath)


Sub ProcessSubFolders(oFolder)
    ' get all files in the folder
    Set cFiles = oFolder.Files
    ' for every file
    For Each oFile In cFiles
        ' check if it's a level file and has "Random" in its name
        If Right(oFile.Name, Len(".level")) = ".level" And InStr(oFile.Name, "Random") Then
            ' if true delete it
            oFile.Delete
        End If
    Next

    ' process all subfolders in the same manner
    For Each oSubFolder In oFolder.SubFolders
        ProcessSubFolders oSubFolder
    Next

    ' if folder is empty
    If oFolder.SubFolders.Count = 0 And oFolder.Files.Count = 0 Then
        ' delete it
        oFolder.Delete 
    End If
End Sub

最佳答案

Shell.Application 对象能够像 manually initiated 一样执行文件系统操作.例如,Folder.CopyHere 方法允许通过将文件作为 Windows Compressed Folders 复制到其中来创建 zip 文件。 .您会看到文件复制进度条和所有内容。

因此,推而广之,使用相同的 Shell.Application 对象执行文件删除的行为与手动删除文件的行为相同。这是我编写的一个简短的 JScript 脚本来测试我的理论:

var shl = new ActiveXObject("Shell.Application");
var items = shl.NameSpace("c:\\users\\me\\desktop").Items();

for (var i=0; i<items.Count; i++) {
    if (/\.tmp$/i.test(items.Item(i).Name)) {
        WSH.Echo('deleting ' + items.Item(i).Name);
        items.Item(i).InvokeVerb('delete');
    }
}

... 从我的桌面删除 *.tmp。不幸的是,对于它遇到的每个 .tmp 文件,我都会收到一个确认窗口对话框,询问“您确定要将此文件发送到回收站吗?”粗略调查,only workaround I've seen是,不是删除文件,而是将文件移动到临时文件夹,然后删除该文件夹。我不确定这是否会满足您的条件,但我认为这值得试验。

关于windows - 手动删除和脚本删除的区别?! ( bat 或vbs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15549642/

有关windows - 手动删除和脚本删除的区别?! ( bat 或vbs)的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  3. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  4. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  5. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  6. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  7. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  8. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  9. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  10. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

随机推荐