1

我承认我在 CMD 和 bat 脚本方面是个菜鸟,因此也许我的问题已经得到解答,但我找不到它,因为我不熟悉这些术语。

基本上我目前正在运行 CMD 为目录内容创建一个 txt 文件,它工作正常,但我想改进这个过程并开始研究一个批处理文件来为多个目录和日期运行它,但只会对命令。

如果您能告诉我正确的方向来查找可能的命令,我将不胜感激。这是我基本上想要实现的目标:

  • 扫描目录 1,创建包含所有内容(文件名)并修改日期 DDMMYYYY 的日志文件并保存在目录 1 下(存在于桌面上)
  • 对目录 2、3、4 等重复上述操作。

现在我不确定如何解决这个问题以及从哪里开始。它看起来很简单,但我还没有设法开始工作。

4

3 回答 3

0

假设您使用的是 Vista 或更高版本,并且您的日期格式为dd/mm/yyyy

for /d %%a in ("%userprofile%\Desktop\Directory*") do (
    for %%b in ("%%~fa\*") do (
        set "fname=%%~fb"
        for /f %%c in ("%%~tb") do set "fdate=%%c"
        setlocal enabledelayedexpansion
        echo !fname! !fdate:/=! >> "%%~fa\LOGFILE.TXT"
        endlocal
    )
)
于 2013-09-23T16:10:05.410 回答
0

在 PowerShell 中,这样的东西应该可以工作:

$folders = 'C:\path\to\Directory1', 'C:\path\to\Directory2', ...
$refDate = (Get-Date '2013-05-27').Date
$recurse = $false

foreach ($d in $folders) {
  $output = Join-Path $d 'filelist.txt'
  Get-ChildItem $d -Recurse:$recurse | ? {
    -not $_.PSIsContainer -and $_.LastWriteTime.Date -eq $refDate
  } | % { $_.Name } | Out-File $output
}

如果您想递归到扫描文件夹的子文件夹,您需要更改$recurse$true,也许更改$_.Name$_.FullName,因此您将获得包含完整路径的文件名,而不仅仅是文件名。

于 2013-09-25T10:48:09.440 回答
0

首先,解析当前日期时间的批处理脚本将是特定于语言环境的。只要您不打算在非美国 Windows 上使用它就可以了。我的解决方案是使用简单的 VBS 脚本来生成当前时间戳

所以我的批处理文件的代码看起来像

@echo off
call GetToday.bat
call %TEMP%\SetToday.bat
SET LOGFILE=Log.%TODAY%.log
echo %LOGFILE%
Use your log here

GetToday.bat:

@echo off
set TOOLS_HOME=%~dp0
cscript /NoLogo %TOOLS_HOME%\Today.vbs >%TEMP%\SetToday.bat
call %TEMP%\SetToday.bat

今天.vbs:

Dim d
d = Now
WScript.Echo "SET TODAY=" & Get2Digit(Year(d)) & Get2Digit(Month(d)) & Get2Digit(Day(d))

Function Get2Digit(value)
    if 10 > value Then
        Get2Digit = "0" & value
    Else
        Get2Digit = Right(value, 2)
    End If
End Function

然而,鉴于 Today.vbs 以 YYMMDD 的形式生成今天的日期。根据我的经验,此类后缀更有用,您可以按名称对文件进行排序以查找特定日期

于 2013-09-23T17:42:35.270 回答