我有以下代码,它根据今天的日期创建一个文件夹,并将文件从文件夹移动到新文件夹。我有以下代码:
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服务器复制到新文件夹。请建议一些复制这些文件的更改。
谢谢!
答案 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.