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

4

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

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

谢谢!


这段代码创建了一个文件夹,但不会将任何文件复制到新创建的文件夹中。那它是做什么用的?请展示脚本输出和日志文件("C:\Program Files (x86)\WinSCP\WinSCP.com" /log=winscp.log)。 - Martin Prikryl
@Rahul 确定,请使用我回答中的固定代码。 - Martin Prikryl
@Rahul,你把命令放到了.bat文件里面,对吧? - Martin Prikryl
3个回答

2

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

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

  • ^必须是行末的最后一个字符。您似乎在lcdget行中^之后有空格。
  • 跟随^的行必须以空格开头。您在以下行中没有任何空格。

请参见WinSCP FAQ 为什么在批处理文件中指定的一些脚本命令在WinSCP命令行上不执行/失败?

此外,您不仅不应该分配给date变量。您甚至不应该以这种方式使用它来格式化时间戳,因为date变量的格式是特定于区域设置的。请参见在批处理作业中创建文件名作为时间戳。因此,最好使用另一种方法。

WinSCP本身支持日期格式化,使用其%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

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

lcd 行中,^ 后仍有空格。 - Martin Prikryl
@GerhardBarnard 是的,我尝试了你的方法,它创建了两个单独的文件,并显示了我之前提到的未知命令错误。 - qwerty
@Rahul 哎呀,忘记在 mkdir "mydir%" 周围加上引号了。 - Gerhard
正确,我只是离开了他修改“日期”,就像他在问题中所做的那样。但是这种格式对他来说也可以工作。 - Gerhard
@GerhardBarnard 谢谢 :) - qwerty
显示剩余3条评论

1
以下是一个批处理脚本,首先创建一个名为日期和时间的文件夹,然后将源文件夹中的文件复制到新文件夹中:
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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接