Windows 使用SAS X命令复制文件夹:引用和特殊字符问题
我正在尝试使用复制一组文件夹。这些文件夹混合了各种类型的文件 让我们假设以下文件结构Windows 使用SAS X命令复制文件夹:引用和特殊字符问题,windows,command-line,sas,Windows,Command Line,Sas,我正在尝试使用复制一组文件夹。这些文件夹混合了各种类型的文件 让我们假设以下文件结构 D:\tmp\Src - directory with source folders D:\tmp\Dest - destination directory 在源目录中,我对名为Data*的文件夹子集感兴趣,例如:data1,data2等 将源和目标主目录定义为宏变量: %let srcLoc=D:\tmp\Src; %let destLoc=D:\tmp\Dest; 我们可以跑步 x xcopy "&am
D:\tmp\Src - directory with source folders
D:\tmp\Dest - destination directory
在源目录中,我对名为Data*
的文件夹子集感兴趣,例如:data1
,data2
等
将源和目标主目录定义为宏变量:
%let srcLoc=D:\tmp\Src;
%let destLoc=D:\tmp\Dest;
我们可以跑步
x xcopy "&SrcLoc.\Data 1" "&destLoc.\Data 1" /q /i /y;
x xcopy "&SrcLoc.\Data 2" "&destLoc.\Data 2" /q /i /y;
/*etc */
一切都很好
预期修改
随着时间的推移,新文件夹将被添加到源目录中。需要编写一个通用代码来处理所有符合命名数据*
的文件夹
当直接在windows命令行中执行时,以下命令将执行任务所需的任务
FOR /F "tokens=*" %G IN ('dir /B /A:D "D:\tmp\Src\Data*"') DO xcopy "D:\tmp\Src\%G" "D:\tmp\Dest\%G" /q /i /y
问题:
尝试从SAS内执行相同操作时:
%let srcLoc=D:\tmp\Src;
%let destLoc=D:\tmp\Dest;
/* just to test resolving of macro variables */
%put FOR /F "tokens=*" %G IN ('dir /B /A:D "&srcLoc.\Data*"') DO xcopy "&srcLoc.\%G" "&destLoc.\%G" /q /i /y;
/* the actual x-command */
x FOR /F "tokens=*" %G IN ('dir /B /A:D "&srcLoc.\Data*"') DO xcopy "&srcLoc.\%G" "&destLoc.\%G" /q /i /y;
有以下问题:
- 警告
和警告:宏G的明显调用未解决。
- 解析的字符串实际上是
FOR/F“tokens=*%G IN('dir/B/A:D“&srcLoc.\Data*”)DO xcopy“D:\tmp\Src\%G”“D:\tmp\Dest\%G”/q/i/y
&srcLoc.
未解析为值,因为它用调用所需的单引号括起来('dir/B/a:D“&srcLoc.\Data*”)
问题:
如何确保%G
不被视为宏,并确保&srcLoc.
解析为实际值
还有更好的方法在sas中完成上述任务吗?可能有更好的方法,但现在我建议您尝试以下方法之一: 分别引用每个有问题的字符
x FOR /F "tokens=*" %nrstr(%)G IN (%bquote(')dir /B /A:D "&srcLoc.\Data*"%bquote(')) DO xcopy "&srcLoc.\%nrstr(%)G" "&destLoc.\%nrstr(%)G" /q /i /y;
在单个%str
中使用屏蔽%
字符引用所有内容
x %str(FOR /F "tokens=*" %%G IN (%'dir /B /A:D "&srcLoc.\Data*"%') DO xcopy "&srcLoc.\%%G" "&destLoc.\%%G" /q /i /y);