BATCH:使用子字符串无法正常删除部分文件名

时间:2018-01-10 10:07:37

标签: windows csv batch-file

我在一个文件夹中有几个.csv文件。它们会自动保存,但包含空格和执行日期和时间(以秒为单位),包含行数。 到目前为止,我无法使用包含空格的文件运行我的powershell脚本。所以我尝试使用批处理重命名文件名。到目前为止没有什么工作正常。在cmd-line中或使用批处理文件。 尝试在文件夹中循环以查找.csv正在工作,但是定义了一个字符串,然后对该文件的某些部分进行子字符串处理。

for %%i in ('dir *.csv /b /s') do set string = %%~ni
set substr=!string:~20,25!
echo !substr!

我首先尝试使用%代替!但也没有奏效。试图使用管道进行循环,但没有奏效。 到目前为止,我的输出只是

!string:~20,25!

我的输出必须只是"真实"报告的文件名,之前或之后没有任何其他内容。 例如,使用该路径和文件名

C:\Users\Username\CSV_Files\Reportoutput Report_2017 2018-01-09T07_10_33.1924R.csv

C:\Users\Username\CSV_Files\Report_2017.csv

当我能够提取没有任何空格的文件名或者#34; Reportoutput" (总是相同的)或报告的开始时间或报告中包含的行我可以使用该字符串并将其与保存文件的路径组合。

有什么想法吗?为什么我的"子串"什么都不工作?我想念一些动作吗?一些代码?

我正在使用Windows。

1 个答案:

答案 0 :(得分:0)

根据您在一个文件夹中显示和循环的文件名结构,(当前目录),如所述并在示例代码中使用:

@Echo Off
For %%A In ("* * *.csv"
) Do For /F "Tokens=2" %%B In ("%%~nA") Do Ren "%%~A" "%%B%%~xA"

如果要检查当前目录的子文件夹内部,请将其更改为:

@Echo Off
For /R %%A In ("* * *.csv"
) Do For /F "Tokens=2" %%B In ("%%~nA") Do Ren "%%~A" "%%B%%~xA"

...如果你想指定基目录名,那么你可以这样做,就像下面两个使用%UserProfile%进行演示的例子,(适当地改变)

@Echo Off
For /R "%UserProfile%" %%A In ("* * *.csv"
) Do For /F "Tokens=2" %%B In ("%%~nA") Do Ren "%%~A" "%%B%%~xA"

@Echo Off
CD /D "%UserProfile%" 2>Nul||Exit /B
For /R %%A In ("* * *.csv"
) Do For /F "Tokens=2" %%B In ("%%~nA") Do Ren "%%~A" "%%B%%~xA"

不是使用字符编号拆分名称,而是简单地使用由空格分隔的文件名字符串的第二个标记,并在重命名命令中将原始文件扩展名添加到其中。