2017-01-12 60 views
0

我有一个名为文件的列表:批处理脚本删除“重复”的文件

file.txt 
file (1).txt 
file (2).txt 

凡大于(数)更新的最后一个文件。

我想要一个.bat脚本,它允许获取file (maxnumer).txtfile.txt的内容。

+4

那你尝试作为代码? – Hackoo

+0

我不知道该怎么做。我现在如何使用循环,如果条件,设置变量,但我没有太多的经验。 Mi第一个想法是运行for循环并测试“file(%i).tex”是否存在。但后来我不知道如何着手...... –

+1

我在你的文章中找不到问题。标题说你想删除某些东西,但“问题”主体并没有描述要删除的东西,而只是说将某个文件复制到另一个文件中。所以请澄清!具有最多号码的文件是否也有最新的创建或修改日期?然后分享你迄今为止所尝试的以及你遇到的问题! StackOverflow不是免费索取脚本的地方!阅读此:[问] – aschipfl

回答

4

dir /B /OD /TW file*.txt按上次写入时间的排序顺序列出文件名(参见dir /?)。

下一页评论批处理脚本能为你做的工作:

@echo OFF 
SETLOCAL EnableExtensions 
rem delete empty `_lastfile` variable 
set "_lastfile=" 
rem store file name of last written time into `_lastfile` variable 
for /F "delims=" %%G in ('dir /B /OD /TW file*.txt 2^>NUL') do set "_lastfile=%%~G" 
rem            ↑↑↑↑↑↑ suppress errors 
rem check the `_lastfile` variable 
rem is defined? 
rem     AND is different from "file.txt"? 
if defined _lastfile if /I "%_lastfile%" NEQ "file.txt" copy /Y "%_lastfile%" "file.txt" 

资源(必读):

+0

非常感谢你 –

+0

比我的答案更好,做得好:) –

1

这是一个hacky答案。

该脚本将偏离file (1).txt所有文件备份到file (10).txt到FILE.TXT,只留下file.txt的它现在包含名为.txt

那是在文件中的文本(10)按升序排列否则它将确保存在的最高数字是最后一个要移动的数字。

@echo off 
set /P name=Enter name of file without extension: 
echo enter extension: 
set /P ext=. 
echo. & echo. 
echo these actions will be performed: & echo. 
FOR /L %%A IN (1,1,10) DO @echo move /y "%name% (%%A).%ext%" "%name%.%ext%" 
echo. & pause & echo. 
FOR /L %%A IN (1,1,10) DO  move /y "%name% (%%A).%ext%" "%name%.%ext%" 
pause 

你可以使用IF EXIST %name% (%%A).%ext%要试图移动不存在的文件停止脚本,但它并没有真正影响到什么做到这一点,所以我没有理会。

上面的脚本将为特定的命名文件执行此操作。要做到这一点对目录中的所有文件都将是可能的,这里有一些提示,让你去

使用dir /b >filenames.txt获得在一个文本文件中列出的目录中的所有文件

执行,每一个动作在一个文本行做

for /f "usebackq delims= tokens=* %%a in (`filenames.txt`)" DO (
    ::some stuff here 
) 

我会去了解它的方式是让filenames.txt,手动删除所有的(n)的文件,所以你只是有“不重复”的文件名列表,并将其用作您的输入。你

有可能是更优雅的解决方案,但具有所有批次的特点我不会惊讶地发现他们是页面和页面长。

如果要保留所有的原始文件没有就这样结束了,没有复制最终file.txt的,那么我想你如果要保留所有的原始文件使用COPY

,那么你会想要使用COPY而不是MOVE。

在这种情况下,去除所有多余的操作(即只复制最高编号的文件,而不是复制所有以文件),然后像IF NOT EXIST %name% (!B!).%ext%其中!B!=%%A+1你(现在的多)内的循环和使用SETLOCAL EnableDelayedExpansion使算术正常工作。但它不是真的必要,复制1,然后2,然后3,然后4做同样的事情,如果比跳过1 2和3,只是做4慢一点。

我希望这有助于指出你在如果不清楚,请随时提问。