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

时间:2017-04-21 12:27:58

标签: file batch-file ftp copy winscp

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

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服务器复制到新文件夹。请建议一些复制这些文件的更改。

谢谢!

3 个答案:

答案 0 :(得分:2)

您的代码一般是正确的(date变量滥用除外,正如@Jeff指出的那样)。

^周围很可能只有错误的空格。

  • ^必须是该行的最后一个字符。在^lcd的行上get之后,您似乎有空格。
  • ^后面的行必须以空格开头。您在以下行中没有任何空格。

请参阅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" 

答案 1 :(得分:1)

我没有安装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" 

答案 2 :(得分:1)

这是一个批处理脚本,该脚本首先创建一个名称为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.