use*_*319 25 windows string batch-file slash
我正在尝试将所有反斜杠()转换为包含文件名和位置的变量中的正斜杠(/).我读过这个并看到过:
%variable:str1=str2%
Run Code Online (Sandbox Code Playgroud)
和
set "var=%var:\=/%"
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的,但我显然没有把它弄好.
这是我的.bat脚本的相关部分:
FOR %%f IN ("E:\myfiles\app1\data\*.csv") DO (
echo %%f
set "f=%%f:\=/%"
echo %%f
echo.
)
Run Code Online (Sandbox Code Playgroud)
输出显示每个文件名列出两次.
即这一行:
set "f=f:\=/%"
Run Code Online (Sandbox Code Playgroud)
没有做我想做的事.谁能看到我做错了什么?
fox*_*ive 64
这会将反斜杠更改为变量中的正斜杠:
set "variable=E:\myfiles\app1\data\*.csv"
set "variable=%variable:\=/%"
echo "%variable%"
Run Code Online (Sandbox Code Playgroud)
Mag*_*goo 20
在块语句中(a parenthesised series of statements),整个块被解析然后执行.%var%块中的任何内容都将被解析块时的变量值替换- 在块执行之前 - 同样的事情适用于a FOR ... DO (block).
因此,IF (something) else (somethingelse)将使用遇到%variables%时的值来执行IF.
克服这个问题的两种常用方法是1)使用setlocal enabledelayedexpansion和使用!var!代替%var%访问改变的值var或2)调用子程序以使用改变的值执行进一步处理.
因此请注意其使用CALL ECHO %%var%%显示更改后的值var.
您的代码包含两个单独的变量f.
第一个是被称为f和引用的循环控制"元变量" %%f.
第二个是f由set "f=..."语句建立的公共环境变量.此变量可以通过使用被访问%f% 但内的block,它会出现保留它有当控制值for被解析(事实上,任何%var%通过的值替换在分析时var 在那个时候)
metavariables不能在子串或替换等字符串操作语句中使用,只有公共环境变量可用于这些操作,因此需要将元f变量的值赋给环境变量f,然后执行环境变量的字符串替换任务f.
当然,扭曲是你必须使用delayedexpansion和!var!语法来访问块中环境变量的修改值.
所以,
setlocal enabledelayedexpansion
for...%%f...do (
echo %%f
set "f=%%f"
set "f=!f:\=/!"
echo !f!
)
echo just for demonstration %f% !f! %%f
Run Code Online (Sandbox Code Playgroud)
这会f以所需的方式设置值(当然,您可以随时更改名称以避免混淆......)
最后一行是简单地表明,所获得的最终值f可以在环化为或者是外部访问%f%或!f!,那%%f是外的上下文和显示为%f.
另外一种方法delayedexpansion是
for...%%f...do (
echo %%f
set "f=%%f"
call set "f=%%f:\=/%%"
call echo %%f%%
)
echo just for demonstration %f% !f! %%f
Run Code Online (Sandbox Code Playgroud)
区别在于使用call和加倍%s,最后一行将显示!f!为 - 文字,因为在delayedexpansion模式之外,!只是另一个没有特殊含义的字符cmd.
小智 5
这似乎为我工作:
echo off
setlocal enabledelayedexpansion
FOR %%f IN ("C:\tools\workspace\*") DO (
set old=%%f
echo !old!
set new=!old:\=/!
echo !new!
echo.
)
Run Code Online (Sandbox Code Playgroud)
使用单独的变量而不是循环变量会有所不同,并启用延迟扩展,因为使用循环变量%% f的变量替换语法似乎无效。