2017-01-25 81 views
-2

我試圖寫一個腳本來替換舊的文件內容與它出現在以下格式的新文件內容:替換舊文件,新文件

舊文件:something.txt
新文件:東西。 txt.new

舊文件需要用新的文件內容替換
新的文件名是不重命名新
舊文件需要被刪除

下面的腳本不工作:莫非你p租賃改寫:

@echo off 
setlocal enabledelayedexpansion 
set FOLDER_PATH=D:\test 
for %%f in (%FOLDER_PATH%*) do if %%f neq %~nx0 (
    set basename=test 
    ren *.txt.new !basename!.txt 
) 
PAUSE 

我有很多文件夾,需要通過每個文件進行迭代,只有我需要的是基本名變量需要在每次迭代

+2

卸下'bash'標籤,該標籤下'Linux' – Inian

+0

您的參數順序錯誤的是更多的發展相關。見'ren /?':'ren ' – Stephan

+0

你可以重寫這段代碼嗎我不能捕捉你的語法? – SmartestVEGA

回答

0
@echo off 
setlocal 
set FOLDER_PATH=D:\test 
for %%f in (%FOLDER_PATH%\*.new) do if "%%~ff" neq "%~f0" (
    ECHO move /Y "%%~ff" "%%~dpnf" 
) 
PAUSE 
來填充舊文件名的名稱

@echo off 
setlocal 
set FOLDER_PATH=D:\test 
for %%f in (%FOLDER_PATH%\*.new) do if "%%~ff" neq "%~f0" (
    if exist "%%~dpnf" ECHO del "%%~dpnf" 
    ECHO rename "%%~ff" "%%~nf" 
) 
PAUSE 

注意,操作movedelrename)命令僅僅是ECHOë d用於調試目的。

還要注意的是if "%%~ff" neq "%~f0"可以省略迭代*.new文件作爲%~f0.bat.cmd擴展(試行echo %~x0 %~f0)。

資源(必讀):

0
  1. 您在​​錯過了\
  2. 你只想重命名*.new文件,那麼爲什麼不使用這種模式而不是*?如果您對匹配*.txt.new模式的文件感興趣,請指定此文件而不是*
  3. 不需要變量basename;只需使用%%~nf刪除(最後一個)後綴(.new)。
  4. 如果目標文件已經存在,ren命令會引發錯誤;因爲您希望它被覆蓋,請改爲使用move /Y。添加> nul以隱藏摘要1 file(s) moved.
  5. 解決項目2後,刪除if查詢。

總而言之,你的腳本可以簡化爲:

@echo off 
set "FOLDER_PATH=D:\test" 
rem // Ensure to specify the correct pattern, `*.new` or `*.txt.new`: 
for %%f in ("%FOLDER_PATH%\*.txt.new") do (
    > nul move /Y "%%~f" "%%~nf" 
) 
pause