【发布时间】:2016-08-24 06:08:25
【问题描述】:
场景: 我们有一个产品的多个版本,并且对于每个版本,都会在主文件夹中创建一个文件夹。帮助文件在各种版本中进行了修改。我在文本文件中列出了所有帮助文件名。 我需要一个脚本:
- 从 filenames.txt 文件中获取每个文件名
- 在整个目录中搜索该名称的文件(在所有版本中)
- 查找最新文件
- 复制到指定文件夹
我从 Stack Overflow 上找到的各种代码中获取帮助,并将它们组合起来得到以下代码:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
echo.
FOR /F "usebackq delims=" %%a in ("filenames.txt") do (
SET "x=%%a"
ECHO '!x!'
SET FFPath=C:\SVN\nlbavwdocsvn\rep_doc_erpln\trunk\ERPLN
SET NewPath=C:\Lavanya\extracted
SET NewestDate=20160824
ECHO Recursively searching %FFPath%
FOR /F %%I in ('DIR %FFPath%\ !x! /a:-d /s /b') DO (
SET FullDate=%%~tI
ECHO %FFPath%
REM Set CurrDate to yyyymmdd format. Note: Will fail if regional settings changed.
SET CurrDate=!FullDate:~6,4!!FullDate:~0,2!!FullDate:~3,2!
If !CurrDate! gtr !NewestDate! (
SET NewestDate=!CurrDate!
SET NewestFile=%%~fI )
ECHO Copying %NewestFile% to %NewPath%
ECHO.
COPY /Y "%NewestFile%" "%NewPath%"
ECHO.
)
)
PAUSE
此代码不起作用。而且我无法找出错误。
【问题讨论】:
-
您应该将
DIR %FFPath%\ !x!替换为DIR "%FFPath%\!x!"。dir会搜索多个掩码,如果以空格分隔(例如:dir *.txt *.jpg将显示所有 *.txt 文件和所有 *.jpg 文件) -
对在循环中设置和读取的所有变量使用延迟扩展!为什么不简单地让
dir按日期排序 (/o:d)... -
@Stephan 我尝试了您建议的更改,但没有得到预期的结果。还有其他方法可以找到解决方案吗?感谢您花时间调查查询!
-
@aschipfl 我不允许修改目录的结构。你能详细说明你的建议吗?提前致谢。
-
将副本拉出 for 循环!