批处理文件中的"Change Directory"命令无法工作

7

我需要创建一个批处理文件来完成我所在班级的一些任务。所有必要的运行内容都已准备就绪,但我找不到一个简单的答案来解释为什么更改目录(CD)对我不起作用。我无法理解。

我的代码如下:

@echo off

title NewUser

: creating a folder called "Scripts" on C:\
: add local user named: "MaxLocal" password: "student"
: create directory at the root of F:\ named "Files_for_Max"
: create ACE for user "MaxLocal" to "Files_for_Max" with: Read, read & Execute, List folder contents
: Re-establish inheritence to sub folders and files
: copies cmd.exe from C:\Windows\System32 folder to "Files_for_Max"
: add "MaxLocal" to management group created in Assignment 3
: produces ICACLS report for "Files_for_Max" called "icaclsReport.txt" in "Scripts"
: moves this .bat file to "Scripts"

mkdir "C:\Scripts"

net user MaxLocal student /add

mkdir "F:\Files_for_Max"

icacls "F:\Files_for_Max" /grant MaxLocal:(OI)(CI)RX 

copy "C:\Windows\System32\cmd.exe" "F:\Files_for_Max"

net localgroup Management MaxLocal /add

icacls F:\Files_for_Max /save C:\Scripts\icaclsReport.txt /t

move  "F:\NewUser.bat" "C:\Scripts"

pause

所以问题在于最后一行。MOVE功能很好,但由于某些原因我不能使用它。我尝试了大量的方法来使用CD完成操作,但都没有得出结论。我需要将F盘上的NewUser.bat文件移动到新创建的scripts文件夹中。是的,我已经尝试过/D命令,但可能我没有正确地设置间距或在不需要引号时使用了引号?有任何想法吗?

2
我在你的代码中没有看到任何CD命令。 - JosefZ
1
@JosefZ:我可以确认你似乎不是盲人。 - Magoo
是的,MOVE命令应该在CD所在的位置,抱歉。 - Shafty
cd 命令并不会移动任何文件,它只是改变当前批处理文件所在的目录。 - ender_scythe
你能否按照StackOverflow的指南制作一个最小工作示例? - john k
显示剩余3条评论
2个回答

11
cd /d "C:\Scripts"

这将更改当前工作目录为 C:\Scripts。
如果您想要移动批处理文件本身:

copy "%~f0" "C:\Scripts"
(goto) 2>nul & del "%~f0"

这会把自己 (%~f0) 复制到 C:\Scripts 目录下,然后删除自身,实际上相当于一个移动命令。
如果你愿意,也可以这样操作:

copy "%~f0" "C:\Scripts"
start "C:\Scripts\~nx0"
(goto) 2>nul & del "%~f0"

这也会启动复制的批处理文件,然后删除自身。


感谢您的帮助。虽然cd /d "C:\Scripts"不起作用,但您提供的其他解决方案确实有用。非常感谢。 - Shafty
那么请考虑接受它作为正确的答案。这表明它解决了您的问题,其他人在需要帮助时也可以查看它。 - ender_scythe
1
cd 命令并不会移动文件,它只是改变当前进程所查看的内容。你可以执行 cd /d C:\Scriptsecho LINE 1 OF NEWUSER.BAT>NewUser.bat... 但这并不是在本质上移动或复制文件。 - ender_scythe
@ender_scythe,你在最后一个示例中漏掉了一个闭合双引号。此外,你可能可以忘记复制和删除,只需用(GoTo) 2>Nul & Move "%~f0" "C:\Scripts"替换这三行代码。 - Compo
1
@Shafty,是哪位老师或IT专业人士告诉你必须使用CD命令来移动文件的?希望你在使用所有命令之前都阅读了帮助文件。CDMOVE命令的作用非常清晰明了。 - Squashman
显示剩余4条评论

0

在复制命令之前,你可以使用cd命令,这可能对于在移动命令之前使用它的方式有所帮助。

cd C:\Windows\system32
copy cmd.exe F:\Files_for_Max

批处理文件问“复制什么到哪里”,所以我们复制用于复制,what 用 cmd.exe 表示,where 用 F:\Files_for_Max 表示。
同样的,
cd F:\
move NewUser.bat C:\Scripts

应该是它能工作的方式。因此,在要求移动指定文件之前,首先要进入 F:\ 目录,就像我在复制命令中所做的那样。


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