所以我创建了一个批处理文件,用于将选定文件夹的路径存储到文本文件中,以便稍后使用其他批处理脚本引用它...
我创建了注册表项,以包含触发此特定批处理文件的任何文件夹的右键单击上下文菜单。
基本上当您右键单击文件夹并单击"发送到脚本"它应该复制右键单击文件夹的整个路径/位置。
为此,我使用以下命令:
SET TargetDir=%~1
我也尝试使用%1
,我也尝试使用以下代码和分隔符
FOR /f "delims=;" %%a in ("%~1") do (
@echo %%a
)
问题是CMD在第一个空格后自动修剪所有内容,因为这是我正在复制的路径,我想保留所有空格和路径
例如 如果我在文件夹上使用该命令,例如&#34; C:/ folder / subfolder&#34; copyng正确完成但如果我在文件夹上使用该命令,例如&#34; C:/ folder / sub文件夹&#34; ,则复制操作不正确,只会给我 < em>&#34; C:/ folder / sub&#34; 删除检测到第一个空格后找到的所有其余部分。
注册表项
[HKEY_CLASSES_ROOT\Directory\shell\send-to-script]
"MUIVerb"="Send To Script"
"SubCommands"="sendscript"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\sendscript]
@="Send To Script"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\sendscript\command]
@="C:\\scripts\\pathtotext.bat %1"
感谢您的帮助
答案 0 :(得分:2)
您应该将注册表项[...\sendscript\command]
更改为
@="C:\\temp\\blob.bat \"%1\""
在您的批次中,您应该使用
REM The DisableDelayedExpansion is for preserve "!" in path names
setlocal DisableDelayedExpansion
SET "TargetDir=%~1"
setlocal EnableDelayedExpansion
(
echo target is !TargetDir!
) > C:\scripts\target.log
if "reseverdFolder" == "!TargetDir!" echo This folder is reserved
答案 1 :(得分:2)
批处理文件未正确注册。例如,使用 regedit 查看注册表项的值:
HKEY_CLASSES_ROOT\rtffile\shell\open\command
该值显示为:
"%ProgramFiles%\Windows NT\Accessories\WORDPAD.EXE" "%1"
所以有两个参数都用双引号括起来:
参数 0 是使用双引号括起来的完整路径,文件名和文件扩展名运行的应用程序,因为路径包含空格字符。
参数 1 是Windows资源管理器传递的%1
引用的RTF文件的名称,包含完整路径,文件名和文件扩展名,当然也可以包含空格或者&()[]{}^=;!'+,`~
中的任何字符cmd.exe
,在cmd /?
上在@="\"C:\\scripts\\pathtotext.bat\" \"%1\""
的命令提示符窗口中运行它时,需要将整个参数括在双引号中作为输出。
因此,您需要在用于导入Windows注册表的* .reg文件中:
"C:\scripts\pathtotext.bat" "%1"
此字符串值在注册表编辑器中显示为:
%1
然后您可以在批处理文件中使用%~1
或call /?
,如命令 CALL 的帮助所解释的那样在执行{{}时在命令提示符窗口中运行1}}。
答案 2 :(得分:1)
SET "TargetDir=%*"
由于显然提供的参数是C:\folder\sub folder
,因此%~1
仅选择cmd
视为两个参数的第一个提供参数。
%*
表示“整个尾巴”
和echo
%*
cmd
应该明确显示int FinalDays = int.TryParse(dt.Rows[0][0], out FinalDays) ? FinalDays : 0;
正在看到的内容。