以下是复制命令。
copy "main.do" "main2.do", replace
但是,我想复制当前目录中的所有do文件,并粘贴到另一个目录。我希望这是在没有我需要指定每个do文件的文件名的情况下完成的。这怎么可能?
来自链接https://www.stata.com/statalist/archive/2006-08/msg00620.html
我试过
cd "C:\Users\Owner\Google Drive\test"
local files : dir "`c(pwd)'" files "*.do"
foreach file in `files' {
copy `file' "`file'_copied"
}
所以我至少可以在当前文件夹中复制。但我仍然不知道如何将所有文件复制到另一个文件夹。
======================
第二种解决方案。
我可以获取当前执行文件的文件名,然后将此do文件复制到另一个文件夹中吗?
谈论某事,但" c(tmpdir)"只获取目录名称。
==========================
我做了更多研究,发现了https://ideas.repec.org/c/boc/bocode/s457628.html
答案 0 :(得分:1)
向后工作:当前的do文件不是一个明确定义的概念。 Do文件可以嵌套,因此Stata可以从a.do
开始,调用b.do
调用c.do
....那么,当前的文件是什么?他们都是。
正如您所说,您可以通过(例如)
获取当前目录中某种文件的列表local filelist : dir . files "*.do"
复制到bar
只需要提及bar
,虽然您似乎也想更改文件名:
foreach f of local filelist {
local F : subinstr local f ".do" "2.do", all
copy `f' bar/`F'
}
即使在Windows下,使用正斜杠也是谨慎的。 See the discussion here and its references.
此处的有用功能记录为online,并相应地记录在Stata中:
help extended fcn