根据今天的日期创建文件夹并使用批处理文件将文件复制到新文件夹中

Creating a folder according to today's date and copying files into the new folder using batch files

我有以下代码,它根据今天的日期创建一个文件夹,并将文件从一个文件夹移动到新文件夹。我有以下代码:

set date="%date:~7,2%%date:~4,2%%date:~10,4%"
set mydir=%date%
cd "C:\Users\rnan\Desktop\Batch Files\Tess\File History\"
mkdir "C:\Users\rnan\Desktop\Batch Files\Tess\File History\%mydir%"
"C:\Program Files (x86)\WinSCP\WinSCP.com" /command ^
"open ftp://rnan:J13@Files8.cyberlynk.net/tess/" ^
"lcd ""C:\Users\rnan\Desktop\Batch Files\Tess\File History\%mydir%""" ^ 
"get *.csv>1D" ^ 
"exit" 

此代码会创建一个文件夹,但不会将任何文件复制到新创建的文件夹中。正在将文件从 FTP 服务器复制到新文件夹。请建议一些更改以复制这些文件。

谢谢!

您的代码总体上是正确的(除了 date 变量误用,正如@Jeff 指出的那样)。

你很可能只是在 ^ 周围有错误的白色 space。

  • ^ 必须是该行的最后一个字符。在 lcdget 行的 ^ 之后,您似乎有 spaces。
  • ^ 之后的行必须以 space 开头。您在以下行中没有任何 space。

查看 WinSCP 常见问题解答 Why are some scripting commands specified on WinSCP command-line in a batch file not executed/failing?

不仅如此,您不应该分配给 date 变量。您甚至不应该以这种方式使用它来格式化时间戳,作为特定于语言环境的 date 变量的格式。参见 Creating a file name as a timestamp in a batch job。所以,你最好使用另一种方法。

WinSCP itself supports date formatting 使用其 %TIMESTAMP% 语法。

以下代码修复了 ^ 的问题并使用 WinSCP 可靠地格式化日期:

set TIMESTAMP_FORMAT=yyyy-mm-dd
cd "C:\Program Files (x86)\WinSCP"
for /F "tokens=* USEBACKQ" %%F in (`WinSCP.com /command "echo %%TIMESTAMP#%TIMESTAMP_FORMAT%%%" "exit"`) do set TIMESTAMP=%%F
set mydir=C:\Users\rnan\Desktop\Batch Files\Tess\File History\%TIMESTAMP%
mkdir "%mydir%"
WinSCP.com /command ^
    "open ftp://rnan:J13@Files8.cyberlynk.net/tess/" ^
    "lcd ""%mydir%""" ^
    "get *.csv>1D" ^
    "exit" 

我没有安装 WinSCP,所以这还没有经过测试,但为什么不试试呢?

set datetime=%date:~7,2%%date:~4,2%%date:~10,4%
set "mydir=C:\Users\rnan\Desktop\Batch Files\Tess\File History\%datetime%"
mkdir "%mydir%"
"C:\Program Files (x86)\WinSCP\WinSCP.com" /command ^
   "open ftp://rnan:J13@Files8.cyberlynk.net/tess/" ^
   "lcd ""%mydir%""" ^
   "get *.csv>1D" ^
   "exit" 

这是一个批处理脚本,它首先创建一个名为 date&time 的文件夹,然后从源文件夹复制文件并将其传递到新文件夹:

echo off

for /f %%# in ('wMIC Path Win32_LocalTime Get /Format:value') do @for /f %%@ in ("%%#") do @set %%@
set CUR_YYYY=%year%
set CUR_MM=%month%
set CUR_DD=%day%


set CUR_HH=%time:~0,2%


set SOURCE=%C:\Work\Deployed-Content%
set TARGET=%C:\Work\%

if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)

set CUR_NN=%time:~3,2%
set CUR_SS=%time:~6,2%
set CUR_MS=%time:~9,2%


set FOLDERNAME=%CUR_YYYY%.%CUR_MM%.%CUR_DD%-%CUR_HH%-%CUR_NN%-%CUR_MS%
mkdir %FOLDERNAME%

robocopy %SOURCE%  %TARGET%%FOLDERNAME% /mir

echo Over and out.