鉴于您的示例 dir cmd,您似乎希望根据写入文件的年份和月份将文件移动到文件夹中。
使用您的确切方法 od 查找日期是一种选择,其中 4 种很快就会浮现在脑海中。 (想到一个For 循环、Dir、Where 和Forfiles)
要从任何这些 cmd 选项中分离出可用的日期,您可以将日期的 cmd 输出保存到变量中,并通过将其切割成特定的小节或使用 FOR
/F 循环来标记化来手动操作它(将其切成小块)使用您在输出中显示的delimiters 日期的部分。
但是,要从 Dir 将其捕获到变量中,需要在 For /F 循环中进行解析,在这种情况下,我们可以直接标记日期,而不是创建临时变量。
出于这些原因和其他原因(例如能够在 cmd 脚本或 CLI 中以相同的逻辑运行),我更喜欢使用For /F 循环。
这可以直接粘贴到命令行中:
@FOR /F "Tokens=2-3 delims=- " %A IN ('
dir /A-D /T:C "C:\Sethu\LICENSE"
^| Find /I "LICENSE"
') DO @(
MD "C:\Sethu\Y%B\%B%A\"
MOVE /Y "C:\Sethu\LICENSE" "C:\Sethu\Y%B\%B%A\LICENSE"
)
或者,如果您希望有一个 CMD 脚本,您可以编辑路径和文件所在的位置,您可以使用:
@(
SETLOCAL EnableDelayedExpansion
ECHO OFF
SET "_Path=C:\Sethu"
SET "_File=LICENSE"
)
FOR /F "Tokens=2-3 delims=- " %%A IN ('
dir /A-D /T:C "%_Path%\%_File%"
^| Find /I "%_File%"
') DO (
IF NOT EXIST "%_Path%\Y%%B\%%B%%A\" (
MD "%_Path%\Y%%B\%%B%%A\"
)
MOVE /Y "%_Path%\%_File%" "%_Path%\Y%%B\%%B%%A\%_File%"
)
如上所述,我使用FOR /F 循环来解析 DIR 的输出并将日期分成两个标记,%%A 代表月份,%%B 代表年份。
然后我使用这些令牌创建目录和子目录MD "%_Path%\Y%%B\%%B%%A\" 并将文件移动到该目录。
以上示例适用于一个特定文件,以下示例适用于多个文件
以上示例适用于一个特定文件,以下示例适用于多个文件,并允许组合完全定义的文件名和路径,以及包含通配符的文件名的路径以匹配多个文件。
在 CLI(CMD 提示符)处
FOR %a IN (
"C:\Sethu\LICENSE"
"C:\Some\Folder\thisthat.txt"
"C:\Another\Folder\*.xls*"
) DO @(
FOR /F "Tokens=2-3 delims=/ " %A IN (
"%~ta"
) DO @(
MD "%~dpaY%B\%B%A\"
MOVE /Y "%~fa" "%~dpaY%B\%B%A\%~nxa"
)
)
在 CMD 脚本中:
@(
SETLOCAL EnableDelayedExpansion
ECHO OFF
)
FOR %%a IN (
"C:\Sethu\LICENSE"
"C:\Some\Folder\thisthat.txt"
"C:\Another\Folder\*.xls*"
) DO @(
FOR /F "Tokens=2-3 delims=/ " %%A IN (
"%%~ta"
) DO @(
MD "%%~dpaY%%B\%%B%%A\"
MOVE /Y "%%~fa" "%%~dpaY%%B\%%B%%A\%%~nxa"
)
)
PAUSE