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);