在 SQL Server 中使用 xp_cmdshell,我能够根据以下内容加载文件修改日期使用命令例如
z: & forfiles /m *.jpg /s /d 07/16/2015 /c “cmd /c echo @fdate @ftime @path”
但我想知道如何根据创建日期. 如能提供任何帮助我将非常感激。
在 stackoverflow 上有人提问,但尚未得到答复。请查看链接了解详情如何通过 SQL Server 的 xp_cmdshell 在 Windows 命令提示符中根据创建日期加载文件
答案1
这有点作弊,因为它需要你编译一个小程序来帮助完成这个。它需要一个简单的 c# 程序,但主要是 cmd。
我的想法是,如果 cmd 包含一个程序/命令,当给定一个文件名时,它会在一行中给出文件的完整路径和创建日期/时间。然后在 cmd 中,可以使用 cmd 的 for 命令,将该(显示文件的路径和创建日期/时间)命令应用于每个文件。所以我编写了一个小程序,它可以获取文件名并显示其完整路径和创建日期/时间。然后我在 cmd 中使用它。
该程序..
C:\blah>type a.cs
using System.IO;
class asdf
{
public static void Main(string[] args) {
if(args.Length==0) {
System.Console.WriteLine("Pass a filename");
return;
}
System.IO.FileInfo fileInfo = new FileInfo(args[0]);
System.Console.Write(fileInfo.FullName+" ");
System.DateTime creationTime = fileInfo.CreationTime;
System.Console.WriteLine("cdt "+creationTime);
}
}
C:\blah>
编译
C:\blah>csc a.cs
Microsoft (R) Visual C# Compiler version 4.0.30319.18408
for Microsoft (R) .NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.
C:\blah>
这样就创建了一个.exe
a.exe 是一个小程序,当传递文件名作为参数时,会提供完整路径和创建日期/时间
C:\blah>a.exe w.obj<ENTER>
C:\blah\w.obj cdt 25/07/2015 1:03:52 AM
C:\blah>
其余的是 cmd
如果你没有 C# 编译器
我在这里添加了一个指向 a.cs(上面的源代码)a.exe 的链接,由于 chrome 会尝试阻止任何 exe,因此您可以下载 a.ex2 并重命名它。或者,当 Chrome 尝试阻止 exe 时,说“关闭”,然后转到 chrome 中的下载并说恢复文件。但无论您想怎么做,您都可以获得该 EXE。如果您想这样做,也许 visual studio express(如 visual studio 的免费小版本)会有 csc.exe 让您编译它。
一旦你有了这个小程序,你就可以在cmd中执行此操作
c:\blah>for /r %f in (*.jpg) do @a.exe %f
c:\blah\a.jpg cdt 31/07/2015 3:55:40 PM
c:\blah\a10.jpg cdt 3/11/2013 8:19:07 AM
c:\blah\a11.jpg cdt 3/11/2013 8:19:16 AM
c:\blah\a12.jpg cdt 3/11/2013 8:48:45 AM
C:\blah\dff\Calendar.jpg cdt 25/08/2009 3:00:02 AM
C:\blah\dff\CheckDST.jpg cdt 28/07/2005 2:00:02 AM
因此,您可以执行该命令,但将其转储到文件中
C:\blah>del mynewfile.a
C:\blah>for /r %f in (*.jpg) do @a.exe %f >>mynewfile.a
C:\blah>
然后你可以使用 find 或 gnuwin32 的 grep
C:\blah>find "22/05/2015" mynewfile.a
---------- MYNEWFILE.A
C:\blah\sdff\a.jpg cdt 22/05/2015 5:54:53 AM
C:\blah\sdff\a2.jpg cdt 22/05/2015 6:20:40 AM
C:\blah\sdff\b.jpg cdt 22/05/2015 5:56:12 AM
或者使用 gnuwin32 的 grep
C:\blah>grep "22/05/2015" mynewfile.a
C:\blah\sdff\a.jpg cdt 22/05/2015 5:54:53 AM
C:\blah\sdff\a2.jpg cdt 22/05/2015 6:20:40 AM
C:\blah\sdff\b.jpg cdt 22/05/2015 5:56:12 AM
C:\blah>