Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件-仅当存在其他文件时才删除文件_Batch File - Fatal编程技术网

Batch file 批处理文件-仅当存在其他文件时才删除文件

Batch file 批处理文件-仅当存在其他文件时才删除文件,batch-file,Batch File,我希望创建一个可以执行以下操作的批处理文件: 如果“文件1abc(X).bin”存在,则删除“文件1abc(Y).bin”,如果不存在,则保留“文件1abc(Y).bin”并继续 基本上,一个文件通常有多个版本,其中一种(由文件名中始终保持不变的单个变量标记)优于另一种。但是,如果高级版本不存在,我希望低级版本继续存在 这可能吗?您可以使用IF语句(): 更新-为了解决问题中提到的具体问题: set FileNames="File 1abc (*).bin" set LastVersion=""

我希望创建一个可以执行以下操作的批处理文件:

如果“文件1abc(X).bin”存在,则删除“文件1abc(Y).bin”,如果不存在,则保留“文件1abc(Y).bin”并继续

基本上,一个文件通常有多个版本,其中一种(由文件名中始终保持不变的单个变量标记)优于另一种。但是,如果高级版本不存在,我希望低级版本继续存在


这可能吗?

您可以使用IF语句():

更新-为了解决问题中提到的具体问题:

set FileNames="File 1abc (*).bin"
set LastVersion=""
:: Find last version
for %%f in (%FileNames%) do (
    if "%%f" GTR %LastVersion% SET LastVersion="%%f"
)
:: Delete old versions
for %%f in (%FileNames%) do (
    if "%%f" LSS %LastVersion% DEL "%%f"
)

有一个问题:如果版本(在您的示例中是X或Y)是一个数字,则应该使用固定的位数(例如,(009),(010),…)来指定它,因为(9)被视为大于(10)。

这不需要我为每个文件命名吗?用手去做会不会快得多?这对标题中的问题很有效,但对实际问题中描述的问题无效。您需要为/f循环一个
。这样的事情到底是怎么做的?这个概念对我来说是新的。哦,对了。我没有意识到问题的最后一段让事情变得更复杂了……对不起。真的是我的错。我仍然不知道如何将我的想法压缩成一个表达完整概念的有凝聚力的主题标题。请提供迄今为止您尝试过的任何代码,并在您的问题中添加一些示例数据以供澄清。。。
set FileNames="File 1abc (*).bin"
set LastVersion=""
:: Find last version
for %%f in (%FileNames%) do (
    if "%%f" GTR %LastVersion% SET LastVersion="%%f"
)
:: Delete old versions
for %%f in (%FileNames%) do (
    if "%%f" LSS %LastVersion% DEL "%%f"
)