我想将文件移动到具有动态名称的文件夹内的子文件夹中。
T:/固定名称/07-28-20/固定名称/
日期(07-28-20)每天都会变化,因此这会每天变化。
我可以创建一个批处理文件,将文件移动到文件夹内的特定子文件夹,但无法添加/找到能够在不每天更改批处理文件的情况下获取文件夹中的新日期的通配符。
现在的样子是这样的:移动“C:\Users\xxxxxx\Company Name\Landing Page\Tuesday”.xlsm“\网络驱动器\数据\测试\07-28-20\2”
谢谢你,
答案1
如果我在下面的答案中涵盖了您已经知道的任何内容,请原谅我。=)请注意,如果您想要更多强大的选项,PowerShell 可能是批处理的一个更好的替代方案。
我无法添加/找到一个通配符,以便能够在文件夹中获取新日期,而无需每天更改批处理文件。
可能有更好的选择,但以下是三种可能的解决方案,具体取决于您的需求。
当日转乘
假设传输发生在同一天(即您在星期二移动星期二的文件),您可以解析和格式化当前日期(由 Windows 提供)以在您的move
命令中使用:
例如 move_with_current_date.bat
@ECHO OFF
@REM Turn the current %DATE% (ex. "Sun 07/26/2020") into ex. "07-26-20"
@REM and place it in a new variable called "CurrentDate".
SET CurrentDate=%DATE:~4,2%-%DATE:~7,2%-%DATE:~12,2%
@REM SET DestinationFolder=folder\%CurrentDate%\subfolder
SET DestinationFolder=C:\path with spaces\folder\%CurrentDate%\subfolder
@REM Optional. Make the destination folder if it doesn't already exist.
IF NOT EXIST "%DestinationFolder%" MKDIR "%DestinationFolder%"
MOVE "file.txt" "%DestinationFolder%"
在哪里:
%DATE%
以例如格式从 Windows 返回当前日期Sun 07/26/2020
。%DATE:~X,Y%
是的子串%DATE%
。X 表示从字符串开头(从 0 开始)开始“跳过”的字符数,Y 表示在该点之后要保留的字符数。因此,要从Sun
中提取Sun 07/26/2020
,子字符串调用将是%DATE:~0,3%
(从位置 0 开始并收集接下来的三个字符)。
从文件中读取名称
假设传输不是在同一天进行(即您在周三移动周二的文件),您可以读取文件夹名称的简单文本文件(例如给定的日期):
例如 date.txt (无尾随空格)
07-26-20
例如 move_with_file_contents.bat
@ECHO OFF
@REM Read the contents of ex. date.txt.
@REM Note that this file *cannot* have trailing spaces.
FOR /F "usebackq tokens=* delims=" %%x in ("date.txt") DO SET CurrentDate_Read=%%x
@REM SET DestinationFolder=folder\%CurrentDate_Read%\subfolder
SET DestinationFolder=C:\path with spaces\folder\%CurrentDate_Read%\subfolder
@REM Optional. Make the destination folder if it doesn't already exist.
IF NOT EXIST "%DestinationFolder%" MKDIR "%DestinationFolder%"
MOVE "file.txt" "%DestinationFolder%"
如果仅使用 ex. ,则不需要循环
usebackq
中的选项。但是,如果没有此选项,使用引号(例如)表示带有空格的路径将无法正常工作(其间的任何东西都将被解释为文字字符串)。FOR
date.txt
""
""
请注意,您的 ex. 文件中没有尾随空格
date.txt
。尾随空格会导致路径格式错误,例如folder\07-26-20 \subfolder
(后面有一个空格07-26-20
)。简而言之,虽然文件夹名称开头可以有空格,但文件夹名称结尾不允许有空格。
请注意,创建 ex 的一种可能方法date.txt
是:
例如 create_date_file.bat
@ECHO OFF
@REM Turn the current %DATE% (ex. "Sun 07/26/2020") into ex. "07-26-20"
@REM and output it to a file called ex. "date.txt".
ECHO %DATE:~4,2%-%DATE:~7,2%-%DATE:~12,2%> "date.txt"
请注意,日期字符串和 之间不应有间隙>
。否则,这将导致尾随空格问题(如上所示):
@REM Bad. Gap, Trailing Space.
ECHO %DATE:~4,2%-%DATE:~7,2%-%DATE:~12,2% > "date.txt"
@REM Good. No Gap, No Trailing Space.
ECHO %DATE:~4,2%-%DATE:~7,2%-%DATE:~12,2%> "date.txt"
从目录中读取最后一个文件夹名称
如果您的目标文件夹中只有标记为日期的目录(例如07-26-20
,07-27-20
),则可能只需读取最后一个目录名称并在目标中使用它move
:
例如“文件夹”布局
[...]
07-25-20
07-26-20
07-27-20
example.txt
[...]
然后,您可以将 ex.07-27-20
包含到您的move
目标中,如下所示:
@ECHO OFF
@REM Returns only directory (i.e. not file) names in a folder.
FOR /F "delims=" %%x in ('dir /b /ad "folder"') DO SET LastFolder_Read=%%x
@REM SET DestinationFolder=folder\%LastFolder_Read%\subfolder
SET DestinationFolder=C:\path with spaces\folder\%LastFolder_Read%\subfolder
@REM Optional. Make the destination folder if it doesn't already exist.
IF NOT EXIST "%DestinationFolder%" MKDIR "%DestinationFolder%"
MOVE "file.txt" "%DestinationFolder%"
这里需要注意的是,这假设 ex.07-27-20
在您的move
.