我有一个名为的文件列表:
file.txt file (1).txt file (2).txt
等
更大(数字)是最新更新的文件。
我想要一个.bat
脚本,允许将file (maxnumer).txt
的内容转换为file.txt
。
答案 0 :(得分: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"
资源(必读):
%~G
等特殊页面)Command Line arguments (Parameters) 2>NUL
等特殊页面)Redirection 答案 1 :(得分:1)
这是一个hacky的答案。
此脚本会将所有文件从file (1).txt
移至file (10).txt
至file.txt,只留下file.txt,该文件现在包含文件(10)中的文本.txt
按升序执行此操作将确保存在的最高编号是最后一个要移动的编号。
@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就慢一点。
我希望这足以帮助您指出正确的方向,如果不清楚,请随时提问。