我想使用文件日期来移动文件。假设我有 2011 年 5 月 10 日创建的文件 test.txt,我想将该文件移动到 C:\2011\05\10\test.txt。
你可以做类似的事情
我想我的问题很简单:如何将文件日期放到命令行上?应该用什么来替换“DATE /t”来获取 test.txt 的“创建日期”?
编辑进一步研究:我可以通过 dir & find 获取日期时间...但它在批处理文件中不起作用...
答案1
我将其作为批处理文件执行,因此使用了两个 % 符号。如果您从命令行执行此操作,则只需将其改为单个即可。
for %%f in (*.txt) do (
for /f "tokens=1-3 delims=/ " %%i in ("%%~tf") do (
if not exist "C:\%%k\%%i\%%j" mkdir "C:\%%k\%%i\%%j"
move "%%f" "C:\%%k\%%i\%%j" >NUL
)
)
因此,对于您关于获取文件日期的问题,简短的回答是%~tI
在 for 语句中使用,其中 I 是 for 语句中使用的变量。请参阅“ help for
”以了解有关其他可用内容的更多信息。
答案2
您需要做的是执行 FOR 命令并处理 DIR 命令的输出。您可能需要嵌套两个 FOR 命令才能获取日期的各个数字。
建议使用的 DIR 命令:
dir c:\ /TC /A-D
建议的 FOR 命令:
FOR /F " TOKENS=1,5 delims= " %A IN ('dir c:\ /TC /A-D') DO @ECHO A-%A B-%B
这应该可以满足您大部分需要,以便使其正常工作。问题是 CMD 不擅长这种工作。虽然您可以这样做,但我建议您使用更高级的语言,例如 powershell。它对 Windows 是免费的,Quest Software 制作了一款很棒的 GUI 编辑器,名为电源图形用户界面。
这是我在 Powershell 中编写的用于执行此操作的代码。对我来说,这更容易理解。
#Get files in C:\temp and filter out directories
$tarfol = "C:\temp" #Target Folder
$var = Get-ChildItem $tarfol | Where-Object {$_.mode -inotmatch "d"}
#Process Files
foreach($item in $var)
{
#Build New Folder Path
$folder = "$tarfol\$item.CreationTime.Year\$item.CreationTime.Month\$item.CreationTime.Day"
#Test for for folder
if(!(Test-Path $folder)) {
#Create folder
New-Item -Path C:\temp\$y\$m\$d -ItemType directory
}
#Move item
Move-Item -Path $item.FullName -Destination "$folder"
}
希望这可以帮助。
答案3
我不得不用 ^ 来逃避 |。